<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 0, comments - 77, trackbacks - 0, articles - 356
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    用OLE操作Excel(目前最全的資料)

    Posted on 2006-05-12 15:03 semovy 閱讀(3245) 評論(2)  編輯  收藏 所屬分類: C++ Builder相關(guān)
    文檔標題:用OLE操作Excel(目前最全的資料)(04.2.19更新)  作者:?ccrun

    關(guān)?鍵?字:Office,Excel,Sheet,Cell,OLE,CreateObject,Merge,工作簿,工作表,單元格,合并,自動化

    本文轉(zhuǎn)自?C++Builder?研究?-?http://www.ccrun.com/article/go.asp?i=529&d=0iezy5
    用OLE操作Excel(目前最全的資料)(04.2.19更新)
    本文檔部分資料來自互聯(lián)網(wǎng),大部分是ccrun(老妖)在Excel中通過錄制宏-->察看宏代碼-->轉(zhuǎn)為CB代碼而來.本文檔不斷更新中.歡迎大家關(guān)注.

    要在應(yīng)用程序中控制Excel的運行,首先必須在編制自動化客戶程序時包含Comobj.hpp
    #include?\\\"Comobj.hpp\\\"

    C++?Builder把Excel自動化對象的功能包裝在下面的四個Ole?Object?Class函數(shù)中,應(yīng)用人員可以很方便地進行調(diào)用。
    設(shè)置對象屬性:void OlePropertySet(屬性名,參數(shù)……);
    獲得對象屬性:Variant ?OlePropertyGet(屬性名,參數(shù)……);
    調(diào)用對象方法:1)?Variant OleFunction(函數(shù)名,參數(shù)……);
    ?2)?void ?OleProcedure(過程名,參數(shù)……);

    在程序中可以用宏定義來節(jié)省時間:

    #define ?PG ?OlePropertyGet
    #define ?PS ?OlePropertySet
    #define ?FN ?OleFunction
    #define ?PR ?OleProcedure

    舉例:
    ExcelApp.OlePropertyGet(\\\"workbooks\\\").OleFunction(\\\"Add\\\");
    可寫為
    ExcelApp.PG(\\\"workbooks\\\").FN(\\\"Add\\\");

    C++?Builder中使用OLE控制Excel2000,必須掌握Excel2000的自動化對象及Microsoft?Word?Visual?Basic幫助文件中的關(guān)于Excel的對象、方法和屬性。對象是一個Excel元素,屬性是對象的一個特性或操作的一個方面,方法是對象可以進行的動作。
    首先定義以下幾個變量:
    Variant?ExcelApp,Workbook1,Sheet1,Range1;

    1、Excel中常用的對象是:Application,Workbooks,Worksheets等。

    ★創(chuàng)建應(yīng)用對象★
    ?Variant?ExcelApp;
    ?ExcelApp?=?Variant::CreateObject?(\\\"Excel.Application\\\");
    ?或者
    ?ExcelApp?=?CreateOleObject?(\\\"Excel.Application\\\");

    ★創(chuàng)建工作簿對象★
    ?Variant?WorkBook1;
    ?WorkBook1?=?ExcelApp.PG(\\\"ActiveWorkBook\\\");

    ★創(chuàng)建工作表對象★
    ?Variant?Sheet1;
    ?Sheet1?=?WorkBook1.PG(\\\"ActiveSheet\\\");

    ★創(chuàng)建區(qū)域?qū)ο蟆?br />?Variant?Range;
    ?Range?=?Sheet1.PG(\\\"Range\\\",\\\"A1:A10\\\");
    ?或者使用
    ?Excel.Exec(PropertyGet(\\\"Range\\\")<<\\\"A1:C1\\\").Exec(Procedure(\\\"Select\\\"));

    2、常用的屬性操作:

    ★使Excel程序不可見★
    ?ExcelApp.PS(\\\"Visible\\\",?(Variant)false);

    ★新建EXCEL文件★

    ◎?新建系統(tǒng)模板的工作簿
    ?ExcelApp.PG(\\\"workbooks\\\").FN(\\\"Add\\\") //默認工作簿
    ?ExcelApp.PG(\\\"workbooks\\\").FN(\\\"Add\\\",?1) ?//單工作表
    ?ExcelApp.PG(\\\"workbooks\\\").FN(\\\"Add\\\",?2) ?//圖表
    ?ExcelApp.PG(\\\"workbooks\\\").FN(\\\"Add\\\",?3) ?//宏表?
    ?ExcelApp.PG(\\\"workbooks\\\").FN(\\\"Add\\\",?4) ?//國際通用宏表
    ?ExcelApp.PG(\\\"workbooks\\\").FN(\\\"Add\\\",?5) ?//與默認的相同
    ?ExcelApp.PG(\\\"workbooks\\\").FN(\\\"Add\\\",?6) ?//工作簿且只有一個表
    ?或者使用ExcelApp的Exec方法
    ?Excel.Exec(PropertyGet(\\\"Workbooks\\\")).Exec(Procedure(\\\"Add\\\"));
    ◎?新建自己創(chuàng)建的模板的工作簿
    ?ExcelApp.PG(\\\"workbooks\\\").FN(\\\"Add\\\",?\\\"C:\\\\\\\\Temp\\\\\\\\result.xlt\\\");

    ★打開工作簿★
    ?ExcelApp.PG(\\\"workbooks\\\").FN(\\\"open\\\",?\\\"路徑名.xls\\\")

    ★保存工作簿★
    ?WorkBook1.FN(\\\"Save\\\"); //保存工作簿
    ?WorkBook1.FN(\\\"SaveAs\\\",?\\\"文件名\\\");//工作簿保存為,路徑注意用\\\"\\\\\\\\\\\"

    ★退出EXCEL★
    ?ExcelApp.FN?(\\\"Quit\\\");
    ?ExcelApp?=?Unassigned;
    ?或者
    ?ExcelApp.Exec(Procedure(\\\"Quit\\\"));

    ★操作工作表★

    ◎?選擇選擇工作表中第一個工作表
    ?Workbook1.PG(\\\"Sheets\\\",?1).PR(\\\"Select\\\");
    ?Sheet1?=?Workbook1.PG(\\\"ActiveSheet\\\");

    ◎?重命名工作表
    ?Sheet1.PS(\\\"Name\\\",?\\\"Sheet的新名字\\\");

    ◎?當前工作簿中的工作表總數(shù)
    ?int?nSheetCount=Workbook1.PG(\\\"Sheets\\\").PG(\\\"Count\\\"); ?

    ★操作行和列★
    ?
    ◎?獲取當前工作表中有多少行和多少列:
    ?Sheet1.PG(\\\"UsedRange\\\").PG(\\\"Columns\\\").PG(\\\"Count\\\");?//列數(shù)
    ?Sheet1.PG(\\\"UsedRange\\\").PG(\\\"Rows\\\").PG(\\\"Count\\\"); //行數(shù)

    ◎?設(shè)置列寬
    ?ExcelApp.PG(\\\"Columns\\\",?1).PS(\\\"ColumnWidth\\\",?22);
    ?或者
    ?Range?=?ExcelApp.PG(\\\"Cells\\\",?1,?3);
    ?Range.PS(\\\"ColumnWidth\\\",?22);

    ◎?設(shè)置行高
    ?ExcelApp.PG(\\\"Rows\\\",?2).PS(\\\"RowHeight\\\",?25);
    ?或者
    ?Range?=?ExcelApp.PG(\\\"Cells\\\",?2,?1);
    ?Range.PS(\\\"RowHeight\\\",?25); ?

    ◎?在工作表最前面插入一行
    ?Sheet1.PG(\\\"Rows\\\",?1).PR(\\\"Insert\\\");

    ◎?刪除一行
    ?ExcelApp.PG(\\\"Rows\\\",?2).PR(\\\"Delete\\\");?//將第2行刪除

    ?//?本文作者:ccrun?,如轉(zhuǎn)載請保證本文檔的完整性,并注明出處。
    ?//?歡迎光臨?C++?Builder?研究?www.ccrun.com
    ?//?摘自:http://www.ccrun.com/doc/go.asp?id=529

    ★操作單元格★

    ◎?設(shè)置單元格字體
    Sheet1.PG(\\\"Cells\\\",?1,?1).PG(\\\"Font\\\").PS(\\\"Name\\\",?\\\"隸書\\\");?//字體
    Sheet1.PG(\\\"Cells\\\",?2,?3).PG(\\\"Font\\\").PS(\\\"size\\\",?28); ?//大小

    ◎?設(shè)置所選區(qū)域字體
    ?Range.PG(\\\"Cells\\\").PG(\\\"Font\\\").PS(\\\"Size\\\",?28);
    ?Range.PG(\\\"Cells\\\").PG(\\\"Font\\\").PS(\\\"Color\\\",?RGB(0,?0,?255));
    ?其中參數(shù)的設(shè)置:
    ?Font ?Name?:?\\\"隸書\\\" ?//字體名稱
    Size?:?12 ?//字體大小
    ?Color?:?RGB(*,*,*) ?//顏色
    ?Underline?:?true/false ?//下劃線
    ?Italic:?true/false ?//斜體

    ◎?設(shè)置單元格格式為小數(shù)百分比
    ?Sheet1.PG(\\\"Cells\\\",?1,?1).PS(\\\"NumberFormatLocal\\\",?\\\"0.00%\\\");

    ◎?設(shè)定單元格的垂直對齊方式
    ?Range?=?ExcelApp.PG(\\\"Cells\\\",?3,?4);
    ?//?1=靠上?2=居中?3=靠下對齊?4=兩端對齊?5=分散對齊
    ?Range.PS(\\\"VerticalAlignment\\\",?2); ?

    ◎?設(shè)定單元格的文本為自動換行
    ?Range?=?ExcelApp.PG(\\\"Cells\\\",?3,?4);
    ?Range.PS(\\\"WrapText\\\",?true);
    ?
    ★單元格的合并★

    ◎?Range?=?Sheet1.PG(\\\"Range\\\",?\\\"A1:A2\\\"); //A1和A2單元格合并
    ?String?strRange?=?\\\"A\\\"?+?IntToStr(j)?+?\\\":\\\"?+?\\\"C\\\"?+?IntToStr(j);?//比如:A1:C5
    ?Range1=Sheet1.PG(\\\"Range\\\",?strRange.c_str());?//可以用變量控制單元格合并
    ?Range1.FN(\\\"Merge\\\",?false);

    ★讀寫單元格★

    ◎?指定單元格賦值
    ?String?strValue?=?\\\"abcdefg\\\";
    ?Sheet1.PG(\\\"Cells\\\",?3,?6).PS(\\\"Value\\\",?strValue.c_str());?
    ?Sheet1.PG(\\\"Cells\\\",?j,?1).PS(\\\"Value\\\",?\\\"總記錄:\\\"?+?String(j-6));
    ?或者使用
    ?Excel.Exec(PropertyGet(\\\"Cells\\\")<<1<<3).Exec(PropertySet(\\\"Value\\\")<<15);

    ◎?所選區(qū)域單元格賦值
    ?Range.PG(\\\"Cells\\\").PS(\\\"Value\\\",?10); ?

    ◎?所選區(qū)域行賦值
    ?Range.PG(\\\"Rows\\\",1).PS(\\\"Value\\\",?1234);

    ◎?工作表列賦值
    ?Sheet1.PG(\\\"Columns\\\",1).PS(\\\"Value\\\",?1234);?

    ◎?讀取取值語句:
    ?String?strValue?=?Sheet1.PG(\\\"Cells\\\",?3,?5).PG(\\\"Value\\\");

    ★窗口屬性★

    ◎?顯示屬性
    ?ExcelApp.PS(\\\"Windowstate\\\",?3); ?//最大化顯示
    1---------xlNormal //正常顯示
    2---------xlMinimized ?//最小化顯示
    3---------xlMaximized ?//最大化顯示

    ◎?狀態(tài)欄屬性
    ?ExcelApp.PS(\\\"StatusBar\\\",?\\\"您好,請您稍等。正在查詢!\\\");
    ?ExcelApp.PS(\\\"StatusBar\\\",?false); ?//還原成默認值

    ◎?標題屬性:
    ?ExcelApp.PS(\\\"Caption\\\",?\\\"查詢系統(tǒng)\\\");
    ?
    3、操作圖表

    ★添加圖表
    ?
    ?Variant?Chart;
    ?Chart?=?ExcelApp.Exec(PropertyGet(\\\"Charts\\\")).Exec(Function(\\\"Add\\\"));
    ?ExcelApp.Exec(PropertySet(\\\"Visible\\\")?<<?true);
    ?Chart.Exec(PropertySet(\\\"Type\\\")?<<?-4100);

    ★滾動圖表

    ?for(int?nRotate=5;?nRotate?<=?180;?nRotate?+=?5)
    ?{
    Chart.Exec(PropertySet(\\\"Rotation\\\")?<<?nRotate);
    ?}
    ?for?(int?nRotate?=?175;?nRotate?>=?0;?nRotate?-=?5)
    ?{
    Chart.Exec(PropertySet(\\\"Rotation\\\")?<<?nRotate);
    ?}
    ?
    另外,為保證程序能正常運行,需要在程序中判斷目標機器是否安裝了Office;
    try
    {
    ExcelApp?=?Variant::CreateObject?(\\\"Excel.Application\\\");
    }
    catch(...)
    {
    ShowMessage(\\\"運行Excel出錯,請確認安裝了Office\\\");
    return;
    }?


    #include?\\\"comobj.hpp\\\"
    //---------------------------------------------------------------------------
    //?對指定Excel文件中的指定列進行排序
    //?strExcelFileName?:?excel文件名
    //?nCol?:?指定的列號
    //?nSortStyle?:?1:升序,2:降序
    void?SortExcelColumn(String?strExcelFileName,?int?nCol,?int?nSortStyle)
    {
    Variant?vExcelApp,?vWorkbook,?vRange;
    vExcelApp?=?Variant::CreateObject(\\\"Excel.Application\\\");
    vExcelApp.OlePropertySet(\\\"Visible\\\",?false);
    vExcelApp.OlePropertyGet(\\\"WorkBooks\\\").OleProcedure(\\\"Open\\\",?strExcelFileName.c_str());
    vWorkbook?=?vExcelApp.OlePropertyGet(\\\"ActiveWorkbook\\\");
    vExcelApp.OlePropertyGet(\\\"Columns\\\",?nCol).OleProcedure(\\\"Select\\\");
    vExcelApp.OlePropertyGet(\\\"ActiveSheet\\\").OlePropertyGet(\\\"Cells\\\",?1,?nCol).OleProcedure(\\\"Select\\\");
    vRange?= vExcelApp.OlePropertyGet(\\\"Selection\\\");
    vRange.Exec(Function(\\\"Sort\\\")<<vExcelApp.OlePropertyGet(\\\"Selection\\\")<<nSortStyle);
    vWorkbook.OleProcedure(\\\"Save\\\");
    vWorkbook.OleProcedure(\\\"Close\\\");
    vExcelApp.OleFunction(\\\"Quit\\\");
    vWorkbook?=?Unassigned;
    vExcelApp?=?Unassigned;
    ShowMessage(\\\"ok\\\");
    }

    void?__fastcall?TForm1::Button1Click(TObject?*Sender)
    {
    //?對C:\\\\123\\\\123.xls文件中第一個Sheet的第四列進行升序排序
    SortExcelColumn(\\\"C:\\\\\\\\123\\\\\\\\123.xls\\\",?4,?1);
    }
    //---------------------------------------------------------------------------

    ?

    評論

    # re: 用OLE操作Excel(目前最全的資料)  回復  更多評論   

    2007-11-16 10:48 by liy
    太好了,謝謝!

    # re: 用OLE操作Excel(目前最全的資料)[未登錄]  回復  更多評論   

    2009-05-05 17:13 by dy
    有多點關(guān)于圖表的 操作麼有啊
    都只有添加個空的 有什么用啊
    主站蜘蛛池模板: 亚洲精品在线播放| 亚洲成在人天堂在线| 久久久久精品国产亚洲AV无码| 日本xxxx色视频在线观看免费| 日日狠狠久久偷偷色综合免费 | 亚洲国产精品嫩草影院久久| 亚洲乱码日产一区三区| 亚洲成人午夜电影| 一级成人毛片免费观看| 免费人成无码大片在线观看| 久久青青成人亚洲精品| 男人的天堂网免费网站| 小小影视日本动漫观看免费| 亚洲网址在线观看你懂的| 特级精品毛片免费观看| 亚洲综合免费视频| 野花高清在线观看免费完整版中文 | 国产2021精品视频免费播放| 亚洲欧洲自拍拍偷精品 美利坚| 午夜不卡AV免费| 亚洲人成色777777在线观看| 国产精品亚洲片在线花蝴蝶| 亚洲视频在线免费看| 国产精品亚洲午夜一区二区三区| 中文字幕免费播放| 亚洲图片在线观看| 韩国日本好看电影免费看| 亚洲高清日韩精品第一区| 青草草色A免费观看在线| 亚洲av日韩综合一区久热| 久久激情亚洲精品无码?V| 亚洲日韩AV一区二区三区四区 | 一区二区三区在线观看免费| 久久久久久久综合日本亚洲| 亚洲精品视频在线观看免费| 亚洲色成人WWW永久在线观看| 国产免费爽爽视频免费可以看| 免费成人在线电影| 国产成人麻豆亚洲综合无码精品 | 大陆一级毛片免费视频观看i| 男女作爱免费网站|