欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++讀寫Excel的實(shí)現(xiàn)方法詳解

 更新時(shí)間:2013年05月17日 15:54:42   作者:  
本篇文章是對(duì)C++讀寫Excel的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
1.導(dǎo)入Excel類型庫(kù)
使用Visual C++的擴(kuò)展指令#import導(dǎo)入Excel類型庫(kù):
復(fù)制代碼 代碼如下:

#import "C:\\Program Files\\Common Files\\microsoft shared\\OFFICE14\\MSO.DLL" \
    rename("RGB","MsoRGB") \
    rename("SearchPath","MsoSearchPath")

#import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB"

#import "C:\\Program Files\\Microsoft Office\\Office14\\EXCEL.EXE" \
    rename( "DialogBox", "ExcelDialogBox" ) \
    rename( "RGB", "ExcelRGB" ) \
    rename( "CopyFile", "ExcelCopyFile" ) \
    rename( "ReplaceText", "ExcelReplaceText" ) \
    exclude( "IFont", "IPicture" ) no_dual_interfaces

#import指令會(huì)從指定的可執(zhí)行文件,動(dòng)態(tài)鏈接庫(kù)等COM組件中導(dǎo)出類型庫(kù)(type lib),在Debug和Release臨時(shí)目錄中生成對(duì)應(yīng)的類型庫(kù)頭文件(type lib header file),以供C++程序使用。如以上三條指令在編譯后會(huì)生成excel.tlh, mso.lh和vbetext.olb三個(gè)頭文件,可以在Debug和Release目錄中找到。
2.訪問(wèn)Excel暴露的COM對(duì)象
下面是一段比較完整的訪問(wèn)Excel的實(shí)例代碼。首先用生成的數(shù)據(jù)填充單元格,然后用這些單元格的數(shù)據(jù)生成了一個(gè)圖表(Chart):
復(fù)制代碼 代碼如下:

try
{
    Excel::_ApplicationPtr pExcelApp;
    HRESULT hr = pExcelApp.CreateInstance(L"Excel.Application");
    ATLASSERT(SUCCEEDED(hr));
    pExcelApp->Visible = true;   // make Excel's main window visible

    Excel::_WorkbookPtr pWorkbook = pExcelApp->Workbooks->Open(lpszPathName);  // open excel file
    Excel::_WorksheetPtr pWorksheet = pWorkbook->ActiveSheet;
    pWorksheet->Name = L"Chart Data";
    Excel::RangePtr pRange = pWorksheet->Cells;

    const int nplot = 100;
    const double xlow = 0.0, xhigh = 20.0;
    double h = (xhigh-xlow)/(double)nplot;
    pRange->Item[1][1] = L"x";  // read/write cell's data
    pRange->Item[1][2] = L"f(x)";
    for (int i=0;i<nplot;++i)
    {
        double x = xlow+i*h;
        pRange->Item[i+2][1] = x;
        pRange->Item[i+2][2] = sin(x)*exp(-x);
    }

    Excel::RangePtr pBeginRange = pRange->Item[1][1];
    Excel::RangePtr pEndRange = pRange->Item[nplot+1][2];
    Excel::RangePtr pTotalRange = 
        pWorksheet->Range[(Excel::Range*)pBeginRange][(Excel::Range*)pEndRange];
    Excel::_ChartPtr pChart = pExcelApp->ActiveWorkbook->Charts->Add();
    // refer to :
    // http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.chart.chartwizard(v=vs.80).aspx
    pChart->ChartWizard(
        (Excel::Range*)pTotalRange,
        (long)Excel::xlXYScatter,
        6L,
        (long)Excel::xlColumns,
        1L,1L,
        true,
        L"My Graph",
        L"x",L"f(x)");
    pChart->Name = L"My Data Plot";

    pWorkbook->Close(VARIANT_TRUE);  // save changes
    pExcelApp->Quit();
}
catch (_com_error& error)
{
    ATLASSERT(FALSE);
    ATLTRACE2(error.ErrorMessage());
}

在這段代碼中,Excel::_ApplicationPtr , Excel::_WorkbookPtr 和 Excel::_WorksheetPtr 等均是Visual C++ 編譯器根據(jù)#import指令自動(dòng)生成的智能指針,實(shí)際上就是C++模板類_com_ptr_t<T>的typedef,其定義可在excel.tlh等類型庫(kù)頭文件中找到。
另外,由于#import指令中沒(méi)有指定raw_interface_only修飾符,Visual C++對(duì)Excel的COM接口進(jìn)行了適當(dāng)?shù)姆庋b,以簡(jiǎn)化COM接口屬性和方法的調(diào)用,并且將HRESULT返回值都轉(zhuǎn)換成了C++異常,因此,上面的這段代碼不需要每一步都堅(jiān)持HRESULT,而是改為捕獲C++異常。

相關(guān)文章

  • 純C語(yǔ)言:遞歸二進(jìn)制轉(zhuǎn)十進(jìn)制源碼分享

    純C語(yǔ)言:遞歸二進(jìn)制轉(zhuǎn)十進(jìn)制源碼分享

    這篇文章主要介紹了純C語(yǔ)言:遞歸二進(jìn)制轉(zhuǎn)十進(jìn)制源碼,有需要的朋友可以參考一下
    2014-01-01
  • google c++程序測(cè)試框架googletest使用教程詳解

    google c++程序測(cè)試框架googletest使用教程詳解

    &#8203;GoogleTest 是 Google 的 C++ 測(cè)試和模擬框架,可以幫助程序員測(cè)試C++程序的結(jié)果預(yù)期,這篇文章主要介紹了google c++程序測(cè)試框架googletest使用教程,需要的朋友可以參考下
    2021-08-08
  • 配置CLion管理Qt項(xiàng)目國(guó)際化支持的方法

    配置CLion管理Qt項(xiàng)目國(guó)際化支持的方法

    這篇文章主要介紹了配置CLion管理Qt項(xiàng)目國(guó)際化支持的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • C語(yǔ)言實(shí)現(xiàn)推箱子游戲

    C語(yǔ)言實(shí)現(xiàn)推箱子游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)推箱子游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • c++并查集優(yōu)化(基于size和rank)

    c++并查集優(yōu)化(基于size和rank)

    這篇文章主要介紹了c++并查集優(yōu)化(基于size和rank),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C++實(shí)現(xiàn)LeetCode(87.攪亂字符串)

    C++實(shí)現(xiàn)LeetCode(87.攪亂字符串)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(87.攪亂字符串),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 深入C++中inline關(guān)鍵字的使用

    深入C++中inline關(guān)鍵字的使用

    本篇文章是對(duì)C++中inline關(guān)鍵字的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • QT實(shí)現(xiàn)二、八、十六進(jìn)制之間的轉(zhuǎn)換

    QT實(shí)現(xiàn)二、八、十六進(jìn)制之間的轉(zhuǎn)換

    本文主要介紹了QT實(shí)現(xiàn)二、八、十六進(jìn)制之間的轉(zhuǎn)換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • c++中的string常用函數(shù)用法總結(jié)

    c++中的string常用函數(shù)用法總結(jié)

    以下是對(duì)c++中的string常用函數(shù)的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-09-09
  • 關(guān)于C++的.cpp文件運(yùn)行全過(guò)程

    關(guān)于C++的.cpp文件運(yùn)行全過(guò)程

    這篇文章主要介紹了C++的.cpp文件運(yùn)行全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評(píng)論