天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 40|回复: 0

C++ 读写 EXCEL

[复制链接]
  • TA的每日心情
    开心
    昨天 06:36
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    105

    主题

    11

    回帖

    1308

    积分

    管理员

    积分
    1308
    QQ
    发表于 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. };
    复制代码

     

     

     

     

    C++ 读写 EXCEL
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-11-1 10:37 , Processed in 0.128835 second(s), 24 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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