找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 38|回复: 0

C++ 读写 EXCEL

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 2024-9-26 10:27:00 | 显示全部楼层 |阅读模式
  1. #include "stdafx.h"
  2. #include "ExcelOperate.h"
  3. ExcelOperate::ExcelOperate()
  4. {
  5. }
  6. ExcelOperate::~ExcelOperate()
  7. {
  8. }
  9. BOOL ExcelOperate::CreateApp()
  10. {
  11.         COleException pe;
  12.         //创建Excel 服务器(启动Excel)
  13.         if (!m_ExcelApp.CreateDispatch(_T("Excel.Application"), &pe))
  14.         {
  15.                 AfxMessageBox(_T("启动Excel服务失败,请确保安装了excel 2000或以上版本!"), MB_OK | MB_ICONWARNING);
  16.                 pe.ReportError();
  17.                 throw& pe;
  18.                 return FALSE;
  19.         }
  20.         m_ExcelApp.put_DisplayAlerts(FALSE);//屏蔽警告
  21.         //CString strExcelVersion = m_ExcelApp.get_Version();
  22.         return true;
  23. }
  24. BOOL ExcelOperate::CreateWorkbooks()
  25. {
  26.         if (FALSE == CreateApp())
  27.         {
  28.                 return FALSE;
  29.         }
  30.         m_ecBooks.AttachDispatch(m_ExcelApp.get_Workbooks());
  31.         if (!m_ecBooks.m_lpDispatch)
  32.         {
  33.                 AfxMessageBox(_T("WorkBooks创建失败!"), MB_OK | MB_ICONWARNING);
  34.                 return FALSE;
  35.         }
  36.         return TRUE;
  37. }
  38. BOOL ExcelOperate::CreateWorkbook()
  39. {
  40.         if (!m_ecBooks.m_lpDispatch)
  41.         {
  42.                 AfxMessageBox(_T("WorkBooks为空!"), MB_OK | MB_ICONWARNING);
  43.                 return FALSE;
  44.         }
  45.         COleVariant vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
  46.         m_ecBook.AttachDispatch(m_ecBooks.Add(vtMissing));
  47.         if (!m_ecBook.m_lpDispatch)
  48.         {
  49.                 AfxMessageBox(_T("WorkBook为空!"), MB_OK | MB_ICONWARNING);
  50.                 return FALSE;
  51.         }
  52.         /*
  53.                 //得到document变量
  54.                 m_wdDoc = m_wdApp.GetActiveDocument();
  55.                 if (!m_wdDoc.m_lpDispatch)
  56.                 {
  57.                         AfxMessageBox(_T("Document获取失败!"), MB_OK|MB_ICONWARNING);
  58.                         return FALSE;
  59.                 }
  60.                 //得到selection变量
  61.                 m_wdSel = m_wdApp.GetSelection();
  62.                 if (!m_wdSel.m_lpDispatch)
  63.                 {
  64.                         AfxMessageBox(_T("Select获取失败!"), MB_OK|MB_ICONWARNING);
  65.                         return FALSE;
  66.                 }
  67.                 //得到Range变量
  68.                 m_wdRange = m_wdDoc.Range(vOptional,vOptional);
  69.                 if(!m_wdRange.m_lpDispatch)
  70.                 {
  71.                         AfxMessageBox(_T("Range获取失败!"), MB_OK|MB_ICONWARNING);
  72.                         return FALSE;
  73.                 }
  74.         */
  75.         return TRUE;
  76. }
  77. BOOL ExcelOperate::CreateWorksheets()
  78. {
  79.         if (!m_ecBook.m_lpDispatch)
  80.         {
  81.                 AfxMessageBox(_T("WorkBook为空!"), MB_OK | MB_ICONWARNING);
  82.                 return FALSE;
  83.         }
  84.         m_ecSheets = m_ecBook.get_Sheets();
  85.         if (!m_ecSheets.m_lpDispatch)
  86.         {
  87.                 AfxMessageBox(_T("WorkSheets为空!"), MB_OK | MB_ICONWARNING);
  88.                 return FALSE;
  89.         }
  90.         return TRUE;
  91. }
  92. BOOL ExcelOperate::CreateWorksheet(short index)
  93. {
  94.         if (!m_ecSheets.m_lpDispatch)
  95.         {
  96.                 AfxMessageBox(_T("WorkSheets为空!"), MB_OK | MB_ICONWARNING);
  97.                 return FALSE;
  98.         }
  99.         m_ecSheet = m_ecSheets.get_Item(COleVariant(index));
  100.         if (!m_ecSheet.m_lpDispatch)
  101.         {
  102.                 AfxMessageBox(_T("WorkSheet为空!"), MB_OK | MB_ICONWARNING);
  103.                 return FALSE;
  104.         }
  105.         //auto name= m_ecSheet.get_Name();
  106.         return TRUE;
  107.         /*打开一个Sheet,如不存在,就新增一个Sheet*/
  108.         //CString strSheetName = _T("NewSheet");
  109.         //try
  110.         //{
  111.         //        /*打开一个已有的Sheet*/
  112.         //        lpDisp = m_ecSheets.get_Item(_variant_t(strSheetName));
  113.         //        m_ecSheet.AttachDispatch(lpDisp);
  114.         //}
  115.         //catch (...)
  116.         //{
  117.         //        /*创建一个新的Sheet*/
  118.         //        lpDisp = m_ecSheets.Add(vtMissing, vtMissing, _variant_t((long)1), vtMissing);
  119.         //        m_ecSheet.AttachDispatch(lpDisp);
  120.         //        m_ecSheet.put_Name(strSheetName);
  121.         //}
  122. }
  123. BOOL ExcelOperate::CreateSheet(short index)
  124. {
  125.         if (CreateWorksheets() == FALSE)
  126.         {
  127.                 return FALSE;
  128.         }
  129.         if (CreateWorksheet(index) == FALSE)
  130.         {
  131.                 return FALSE;
  132.         }
  133.         return TRUE;
  134. }
  135. BOOL ExcelOperate::Create(short index)
  136. {
  137.         if (CreateWorkbooks() == FALSE)
  138.         {
  139.                 return FALSE;
  140.         }
  141.         if (CreateWorkbook() == FALSE)
  142.         {
  143.                 return FALSE;
  144.         }
  145.         if (CreateSheet(index) == FALSE)
  146.         {
  147.                 return FALSE;
  148.         }
  149.         return TRUE;
  150. }
  151. int ExcelOperate::GetSheetCount()
  152. {
  153.         return m_ecSheets.get_Count();
  154. }
  155. BOOL ExcelOperate::LoadSheet(const CString& sheet)
  156. {
  157.         if (!m_ecSheets.m_lpDispatch)
  158.         {
  159.                 AfxMessageBox(_T("WorkSheets为空!"), MB_OK | MB_ICONWARNING);
  160.                 return FALSE;
  161.         }
  162.         m_ecSheet = m_ecSheets.get_Item(COleVariant(sheet));
  163.         if (!m_ecSheet.m_lpDispatch)
  164.         {
  165.                 AfxMessageBox(_T("WorkSheet为空!"), MB_OK | MB_ICONWARNING);
  166.                 return FALSE;
  167.         }
  168.         //auto name= m_ecSheet.get_Name();
  169.         return TRUE;
  170. }
  171. void ExcelOperate::ShowApp()
  172. {
  173.         m_ExcelApp.put_Visible(true);
  174.         m_ExcelApp.put_DisplayFullScreen(true);//设置全屏显示
  175.         //m_ExcelApp.put_UserControl(FALSE);
  176. }
  177. void ExcelOperate::HideApp()
  178. {
  179.         m_ExcelApp.put_Visible(FALSE);
  180.         //m_ExcelApp.put_CutCopyMode(false);
  181.         //m_ExcelApp.put_UserControl(FALSE);
  182. }
  183. BOOL ExcelOperate::OpenWorkbook(const CString& fileName, short index)
  184. {
  185.         if (!m_ecBooks.m_lpDispatch)
  186.         {
  187.                 AfxMessageBox(_T("WorkSheets为空!"), MB_OK | MB_ICONWARNING);
  188.                 return FALSE;
  189.         }
  190.         //COleVariant vFileName(_T(fileName));  
  191.         COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
  192.         m_ecBook = m_ecBooks.Open(fileName, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional);
  193.         if (!m_ecBook.m_lpDispatch)
  194.         {
  195.                 AfxMessageBox(_T("WorkSheet获取失败!"), MB_OK | MB_ICONWARNING);
  196.                 return FALSE;
  197.         }
  198.         if (CreateSheet(index) == FALSE)
  199.         {
  200.                 return FALSE;
  201.         }
  202.         return TRUE;
  203. }
  204. BOOL ExcelOperate::Open(const CString& fileName)
  205. {
  206.         if (CreateWorkbooks() == FALSE)
  207.         {
  208.                 return FALSE;
  209.         }
  210.         return OpenWorkbook(fileName);
  211. }
  212. BOOL ExcelOperate::SetActiveWorkbook(short& i)
  213. {
  214.         return 0;
  215. }
  216. BOOL ExcelOperate::SaveWorkbook()
  217. {
  218.         if (!m_ecBook.m_lpDispatch)
  219.         {
  220.                 //AfxMessageBox(_T("Book获取失败!"), MB_OK | MB_ICONWARNING);
  221.                 return FALSE;
  222.         }
  223.         m_ecBook.Save();
  224.         return TRUE;
  225. }
  226. BOOL ExcelOperate::SaveWorkbookAs(const CString& fileName)
  227. {
  228.         if (!m_ecBook.m_lpDispatch)
  229.         {
  230.                 AfxMessageBox(_T("Book获取失败!"), MB_OK | MB_ICONWARNING);
  231.                 return FALSE;
  232.         }
  233.         COleVariant vTrue((short)TRUE),
  234.                 vFalse((short)FALSE),
  235.                 vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
  236.         COleVariant vFileName(fileName);
  237.         long XlFileFormat = 51;
  238.         CString strSuffix = fileName.Mid(fileName.ReverseFind(_T('.')));
  239.         if (0 == strSuffix.CompareNoCase(_T(".xls")))
  240.         {
  241.                 XlFileFormat = 56;
  242.         }
  243.         m_ecBook.SaveAs(
  244.                 vFileName,    //VARIANT* FileName  
  245.                 _variant_t(XlFileFormat),    //VARIANT* FileFormat  
  246.                 vtMissing,    //VARIANT* LockComments  
  247.                 vtMissing,    //VARIANT* Password  
  248.                 vtMissing,    //VARIANT* AddToRecentFiles  
  249.                 vtMissing,    //VARIANT* WritePassword  
  250.                 0,    //VARIANT* ReadOnlyRecommended  
  251.                 vtMissing,    //VARIANT* EmbedTrueTypeFonts  
  252.                 vtMissing,    //VARIANT* SaveNativePictureFormat  
  253.                 vtMissing,    //VARIANT* SaveFormsData  
  254.                 vtMissing,    //VARIANT* SaveAsAOCELetter  
  255.                 vtMissing    //VARIANT* ReadOnlyRecommended  
  256.         );
  257.         return    TRUE;
  258. }
  259. BOOL ExcelOperate::CloseWorkbook()
  260. {
  261.         COleVariant vTrue((short)TRUE),
  262.                 vFalse((short)FALSE),
  263.                 vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
  264.         m_ecBook.Close(vFalse,    // SaveChanges.  
  265.                 vTrue,            // OriginalFormat.  
  266.                 vFalse            // RouteDocument.  
  267.         );
  268.         m_ecBook = m_ExcelApp.get_ActiveWorkbook();
  269.         if (!m_ecBook.m_lpDispatch)
  270.         {
  271.                 //AfxMessageBox(_T("Book获取失败!"), MB_OK | MB_ICONWARNING);
  272.                 return FALSE;
  273.         }
  274.         if (CreateSheet(1) == FALSE)
  275.         {
  276.                 return FALSE;
  277.         }
  278.         return TRUE;
  279. }
  280. void ExcelOperate::CloseApp()
  281. {
  282.         SaveWorkbook();
  283.         COleVariant vTrue((short)TRUE),
  284.                 vFalse((short)FALSE),
  285.                 vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
  286.         //m_ecDoc.Save();  
  287.         if (m_ecRange.m_lpDispatch)
  288.                 m_ecRange.ReleaseDispatch();
  289.         if (m_ecSheet.m_lpDispatch)
  290.                 m_ecSheet.ReleaseDispatch();
  291.         if (m_ecSheets.m_lpDispatch)
  292.                 m_ecSheets.ReleaseDispatch();
  293.         if (m_ecBook.m_lpDispatch)
  294.                 m_ecBook.ReleaseDispatch();
  295.         if (m_ecBooks.m_lpDispatch)
  296.                 m_ecBooks.ReleaseDispatch();
  297.         m_ExcelApp.Quit();
  298.         if (m_ExcelApp.m_lpDispatch)
  299.                 m_ExcelApp.ReleaseDispatch();
  300. }
  301. void ExcelOperate::MergeRange(const CString& begin, const CString& end)
  302. {
  303.         if (!m_ecSheet.m_lpDispatch)
  304.         {
  305.                 AfxMessageBox(_T("Sheet获取失败!"), MB_OK | MB_ICONWARNING);
  306.                 return;
  307.         }
  308.         m_ecRange = m_ecSheet.get_Range(COleVariant(begin), COleVariant(end));
  309.         if (!m_ecRange.m_lpDispatch)
  310.         {
  311.                 AfxMessageBox(_T("Range获取失败!"), MB_OK | MB_ICONWARNING);
  312.                 return;
  313.         }
  314.         m_ecRange.Merge(_variant_t((long)0));
  315.         //m_ecRange.put_HorizontalAlignment(_variant_t((long)-4108));      //水平居中对齐
  316.         //m_ecRange.put_VerticalAlignment(_variant_t((long)-4108));        //竖直居中对齐
  317.         //m_ecRange.put_ColumnWidth(_variant_t(20));                         //列宽
  318.         //m_ecRange.put_RowHeight(COleVariant(_T("25")));                          //行高
  319.         //ft.AttachDispatch(m_ecRange.get_Font());                            //匹配
  320.         //ft.put_Bold(_variant_t((long)1));           //设置粗体,0-不加粗;1-加粗
  321.         //ft.put_Italic(_variant_t((long)1));         //设置斜体,0-不斜;1-斜
  322.         //ft.put_Size(_variant_t((long)18));                         //字大小
  323.         //ft.put_ColorIndex(_variant_t((long)5));                       //字颜色           
  324.         //it.AttachDispatch(m_ecRange.get_Interior());
  325.         //it.put_ColorIndex(_variant_t((long)8));                            //背景色
  326.         //m_ecRange.BorderAround(_variant_t((long)1), _variant_t((long)2), _variant_t((long)1), vtMissing, vtMissing);//线型            // 线宽              //颜色
  327. }
  328. bool ExcelOperate::InsertRow(const long& row, const long& column)
  329. {
  330.         if (!m_ecSheet.m_lpDispatch)
  331.         {
  332.                 AfxMessageBox(_T("Sheet获取失败!"), MB_OK | MB_ICONWARNING);
  333.                 return FALSE;
  334.         }
  335.         m_ecRange = m_ecSheet.get_Cells();
  336.         if (!m_ecRange.m_lpDispatch)
  337.         {
  338.                 AfxMessageBox(_T("Range获取失败!"), MB_OK | MB_ICONWARNING);
  339.                 return false;
  340.         }
  341.        
  342.         m_ecRange.AttachDispatch(m_ecRange.get_Item(COleVariant(row), COleVariant(column)).pdispVal, true);
  343.         //CRange cols = m_ecRange.get_EntireColumn();//获取列
  344.         //cols.AutoFit();
  345.         CRange cols = m_ecRange.get_EntireRow();
  346.         cols.Insert(vtMissing, _variant_t(1));//0是复制上面行格式,1是当前行
  347.         cols.ReleaseDispatch();
  348.         return true;
  349. }
  350. void ExcelOperate::SetRangeAndValue(const CString& begin, const CString& end, const CString& value)
  351. {
  352.         if (!m_ecSheet.m_lpDispatch)
  353.         {
  354.                 AfxMessageBox(_T("Sheet获取失败!"), MB_OK | MB_ICONWARNING);
  355.                 return;
  356.         }
  357.         m_ecRange = m_ecSheet.get_Range(COleVariant(begin), COleVariant(end));
  358.         if (!m_ecRange.m_lpDispatch)
  359.         {
  360.                 AfxMessageBox(_T("Range获取失败!"), MB_OK | MB_ICONWARNING);
  361.                 return;
  362.         }
  363.         m_ecRange.put_Value2(COleVariant(value));       
  364. }
  365. void ExcelOperate::SetRangeAndValue(const long& row, const long& column, const CString& value)
  366. {
  367.         if (!m_ecSheet.m_lpDispatch)
  368.         {
  369.                 AfxMessageBox(_T("Sheet获取失败!"), MB_OK | MB_ICONWARNING);
  370.                 return;
  371.         }
  372.         m_ecRange = m_ecSheet.get_Cells();
  373.         if (!m_ecRange.m_lpDispatch)
  374.         {
  375.                 AfxMessageBox(_T("Range获取失败!"), MB_OK | MB_ICONWARNING);
  376.                 return;
  377.         }
  378.         m_ecRange.put_Item(COleVariant(row), COleVariant(column), COleVariant(value));
  379.         //m_ecRange.AttachDispatch(m_ecSheet.get_UsedRange());//加载已使用的单元格
  380.         //m_ecRange.put_WrapText(_variant_t((long)1));//设置单元格内的文本为自动换行
  381.         //m_ecRange.put_HorizontalAlignment(_variant_t((long)-4108));//水平居中
  382.         //m_ecRange.put_VerticalAlignment(_variant_t((long)-4108));//垂直居中
  383. }
  384. void ExcelOperate::SetRangeAndValue(const long& row, const long& column, const int& value)
  385. {
  386.         if (!m_ecSheet.m_lpDispatch)
  387.         {
  388.                 AfxMessageBox(_T("Sheet获取失败!"), MB_OK | MB_ICONWARNING);
  389.                 return;
  390.         }
  391.         m_ecRange = m_ecSheet.get_Cells();
  392.         if (!m_ecRange.m_lpDispatch)
  393.         {
  394.                 AfxMessageBox(_T("Range获取失败!"), MB_OK | MB_ICONWARNING);
  395.                 return;
  396.         }
  397.         m_ecRange.put_Item(COleVariant(row), COleVariant(column), _variant_t(value));
  398. }
  399. BOOL ExcelOperate::GetRangeAndValue(const CString& begin, const CString& end)
  400. {
  401.         if (!m_ecSheet.m_lpDispatch)
  402.         {
  403.                 AfxMessageBox(_T("Sheet获取失败!"), MB_OK | MB_ICONWARNING);
  404.                 return FALSE;
  405.         }
  406.         m_ecRange = m_ecSheet.get_Range(COleVariant(begin), COleVariant(end));
  407.         if (!m_ecRange.m_lpDispatch)
  408.         {
  409.                 AfxMessageBox(_T("Range获取失败!"), MB_OK | MB_ICONWARNING);
  410.                 return FALSE;
  411.         }
  412.         ret = m_ecRange.get_Value2();//得到表格中的值  
  413.         return TRUE;
  414. }
  415. BOOL ExcelOperate::GetRangeAndValue(const long& row, const long& column)
  416. {
  417.         if (!m_ecSheet.m_lpDispatch)
  418.         {
  419.                 AfxMessageBox(_T("Sheet获取失败!"), MB_OK | MB_ICONWARNING);
  420.                 return FALSE;
  421.         }
  422.         m_ecRange = m_ecSheet.get_Cells();
  423.         if (!m_ecRange.m_lpDispatch)
  424.         {
  425.                 AfxMessageBox(_T("Range获取失败!"), MB_OK | MB_ICONWARNING);
  426.                 return false;
  427.         }
  428.         //CRange range;
  429.         //range.AttachDispatch(m_ecRange.get_Item(COleVariant(row), COleVariant(column)).pdispVal, true);
  430.         m_ecRange.AttachDispatch(m_ecRange.get_Item(COleVariant(row), COleVariant(column)).pdispVal, true);
  431.         ret = m_ecRange.get_Value2();//得到表格中的值        
  432.         return TRUE;
  433. }
  434. void ExcelOperate::GetRowsAndCols(long& rows, long& cols)
  435. {
  436.         COleSafeArray sa(ret);
  437.         sa.GetUBound(1, &rows);
  438.         sa.GetUBound(2, &cols);
  439. }
  440. BOOL ExcelOperate::GetTheValue(const int& rows, const int& cols, CString& dest)
  441. {
  442.         /*long rRows, rCols;
  443.         long index[2];
  444.         VARIANT val;
  445.         COleSafeArray sa(ret);
  446.         sa.GetUBound(1, &rRows);
  447.         sa.GetUBound(2, &rCols);
  448.         if (rows < 1 || cols < 1 || rRows < rows || rCols < cols)
  449.         {
  450.                 AfxMessageBox(_T("行列不在范围"));
  451.                 return FALSE;
  452.         }
  453.         index[0] = rows;
  454.         index[1] = cols;
  455.         sa.GetElement(index, &val);
  456.         if (val.vt != VT_BSTR)
  457.         {
  458.                 CString str;
  459.                 str.Format(_T("出错点2, %d"), val.vt);
  460.                 AfxMessageBox(str);
  461.                 return FALSE;
  462.         }
  463.         dest = val.bstrVal;
  464.         return TRUE;*/
  465.         if (!m_ecSheet.m_lpDispatch)
  466.         {
  467.                 AfxMessageBox(_T("Sheet获取失败!"), MB_OK | MB_ICONWARNING);
  468.                 return FALSE;
  469.         }
  470.         m_ecRange = m_ecSheet.get_Cells();
  471.         if (!m_ecRange.m_lpDispatch)
  472.         {
  473.                 AfxMessageBox(_T("Range获取失败!"), MB_OK | MB_ICONWARNING);
  474.                 return false;
  475.         }
  476.         CRange range;
  477.         range.AttachDispatch(m_ecRange.get_Item(COleVariant((long)rows), COleVariant((long)cols)).pdispVal, true);
  478.         ret = range.get_Value2();
  479.         range.ReleaseDispatch();
  480.         if (ret.vt == VT_BSTR)
  481.         {
  482.                 dest = ret.bstrVal;
  483.         }
  484.         //整数
  485.         else if (ret.vt == VT_INT)
  486.         {
  487.                 dest.Format(_T("%d"), ret.pintVal);
  488.         }
  489.         //8字节的数字
  490.         else if (ret.vt == VT_R8)
  491.         {
  492.                 dest.Format(_T("%.2lf"), ret.dblVal);
  493.         }
  494.         //时间格式
  495.         else if (ret.vt == VT_DATE)
  496.         {
  497.                 SYSTEMTIME st;
  498.                 VariantTimeToSystemTime(ret.date, &st);
  499.                 CTime tm(st);
  500.                 dest = tm.Format(_T("%Y-%m-%d"));
  501.         }
  502.         //单元格空的
  503.         else if (ret.vt == VT_EMPTY)
  504.         {
  505.                 dest = "";
  506.         }
  507.         return TRUE;
  508. }
  509. BOOL ExcelOperate::SetTextFormat(const CString& beginS, const CString& endS)
  510. {
  511.         if (GetRangeAndValue(beginS, endS))
  512.         {
  513.                 m_ecRange.Select();
  514.                 m_ecRange.put_NumberFormatLocal(COleVariant(_T("@")));
  515.                 return TRUE;
  516.         }
  517.         return FALSE;
  518. }
  519. BOOL ExcelOperate::SetTextFormat(long& row, long& column)
  520. {
  521.         if (GetRangeAndValue(row, column))
  522.         {
  523.                 m_ecRange.Select();
  524.                 m_ecRange.put_NumberFormatLocal(COleVariant(_T("@")));
  525.                 return TRUE;
  526.         }
  527.         return FALSE;
  528. }
  529. BOOL ExcelOperate::SetRowToTextFormat(const CString& beginS, const CString& endS)
  530. {
  531.         if (GetRangeAndValue(beginS, endS))
  532.         {
  533.                 m_ecRange.Select();
  534.                 CRange m_tempRange = m_ecSheet.get_Range(COleVariant(beginS), COleVariant(beginS));
  535.                 if (!m_tempRange.m_lpDispatch) return FALSE;
  536.                 COleVariant vTrue((short)TRUE),
  537.                         vFalse((short)FALSE);
  538.                 //int tempArray[2] = {1, 2};  
  539.                 COleSafeArray saRet;
  540.                 DWORD numElements = { 2 };
  541.                 saRet.Create(VT_I4, 1, &numElements);
  542.                 long index = 0;
  543.                 int val = 1;
  544.                 saRet.PutElement(&index, &val);
  545.                 index++;
  546.                 val = 2;
  547.                 saRet.PutElement(&index, &val);
  548.                 //m_tempRange.GetItem(COleVariant((short)5),COleVariant("A"));  
  549.                 m_ecRange.TextToColumns(m_tempRange.get_Item(COleVariant((short)1), COleVariant((short)1)), 1, 1, vFalse, vTrue, vFalse, vFalse, vFalse, vFalse, vFalse, saRet, vFalse, vFalse, vTrue);
  550.                 m_tempRange.ReleaseDispatch();
  551.                 return TRUE;
  552.         }
  553.         return FALSE;
  554. }
复制代码




  1. #pragma once
  2. #include "msexcel/CApplication0.h"
  3. #include "msexcel/CWorkbook.h"
  4. #include "msexcel/CWorkbooks.h"
  5. #include "msexcel/CWorksheet.h"
  6. #include "msexcel/CWorksheets.h"
  7. #include "msexcel/CRange.h"
  8. #include "msexcel/CFont1.h"
  9. #include "msexcel/Cnterior0.h"
  10. class ExcelOperate
  11. {
  12. public:
  13.         ExcelOperate();
  14.         ~ExcelOperate();
  15.         //创建一个新的EXCEL应用程序
  16.         BOOL CreateApp();
  17.         //创建一个新的EXCEL工作簿集合
  18.         BOOL CreateWorkbooks();   
  19.         //创建一个新的EXCEL工作簿
  20.         BOOL CreateWorkbook();   
  21.         //创建一个新的EXCEL工作表集合
  22.         BOOL CreateWorksheets();  
  23.         //创建一个新的EXCEL工作表
  24.         BOOL CreateWorksheet(short index);  
  25.         BOOL CreateSheet(short index);
  26.         //创建新的EXCEL应用程序并创建一个新工作簿和工作表
  27.         BOOL Create(short index = 1);     
  28.         //得到Sheet的总数
  29.         int GetSheetCount();
  30.         //通过名称使用某个sheet,
  31.         BOOL LoadSheet(const CString& sheet);
  32.         //显示EXCEL文档
  33.         void ShowApp();
  34.         //隐藏EXCEL文档
  35.         void HideApp();
  36.         BOOL OpenWorkbook(const CString& fileName, short index = 1);
  37.         //创建新的EXCEL应用程序并打开一个已经存在的文档。
  38.         BOOL Open(const CString& fileName);         
  39.         //设置当前激活的文档。
  40.         BOOL SetActiveWorkbook(short& i);   
  41.         //Excel是以打开形式,保存。
  42.         BOOL SaveWorkbook();      
  43.         //Excel以创建形式,保存。
  44.         BOOL SaveWorkbookAs(const CString& fileName);  
  45.         /// <summary>
  46.         /// 关闭
  47.         /// </summary>
  48.         /// <returns></returns>
  49.         BOOL CloseWorkbook();
  50.         /// <summary>
  51.         /// 退出
  52.         /// </summary>
  53.         void CloseApp();
  54.         //合并单元格
  55.         void MergeRange(const CString& begin, const CString& end);
  56.         //插入行
  57.         bool InsertRow(const long& row, const long& column);
  58.         //设置值
  59.         void SetRangeAndValue(const CString& begin, const CString& end, const CString& value);
  60.         void SetRangeAndValue(const long& row, const long& column, const CString& value);
  61.         void SetRangeAndValue(const long& row, const long& column, const int& value);
  62.         //得到begin到end的Range并将之间的值设置到ret中
  63.         BOOL GetRangeAndValue(const CString& begin, const CString& end);
  64.         BOOL GetRangeAndValue(const long& row, const long& column);
  65.         //得到ret的行,列数
  66.         void GetRowsAndCols( long& rows,  long& cols);
  67.         //返回第rows,cols列的值,注意只返回文本类型的,到dest中
  68.         BOOL GetTheValue(const int& rows,const int& cols, CString& dest);
  69.         //将beginS到endS设置为文本格式(数字的还要用下面的方法再转一次)
  70.         BOOL SetTextFormat(const CString& beginS, const CString& endS);
  71.         BOOL SetTextFormat(long& row, long& column);
  72.         //将beginS到endS(包括数字类型)设置为文本格式
  73.         BOOL SetRowToTextFormat(const CString& beginS, const CString& endS);
  74. private:
  75.         CApplication0 m_ExcelApp;
  76.         CWorkbooks m_ecBooks;
  77.         CWorkbook m_ecBook;
  78.         CWorksheets m_ecSheets;
  79.         CWorksheet m_ecSheet;
  80.         CRange m_ecRange;
  81.         CFont1 ft;  //定义字体变量
  82.         Cnterior it; //定义背景色变量
  83.         VARIANT ret;//保存单元格的值
  84.         LPDISPATCH lpDisp;
  85. };
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-27 21:58 , Processed in 0.141229 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表