MFC用在Excel(語法+註解篇)

沒有留言:
初始化
objApp.CreateDispatch("Excel.Application",&e) //產生一個Excel應用程式
objApp.SetVisible(TRUE); //繪出Excel應用程式視窗
objBooks = objApp.GetWorkbooks(); //取得應用程式的活頁簿記憶體位址
objBook = objBooks.Add(VOptional); //開新檔案
objBook.AttachDispatch(objBooks.Add(_variant_t("C:\\test.xls"))); //開啟舊檔(也可以叫Dlg出來用)
objSheets = objBook.GetWorksheets(); //取得Books的Sheet記憶體位址
objSheet = objSheets.GetItem(COleVariant((short)1)); //開啟sheet1(就是點一下Sheet1翻到這一頁)
objSheet.SetName("My Sheet"); //設定sheet1的名稱稱

設定內容
range = objSheet.GetRange(COleVariant("A1"),COleVariant("A1")); //選取Sheet的範圍(使用Excel座標)
range.SetColumnWidth(_variant_t((float)1.2)); //設定欄寬(像素值)
range.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("My Auto-Excel Demo")); //填入內容
range.BorderAround(_variant_t((long)1),3,1,_variant_t((long)#000000)); //外框
range.SetHorizontalAlignment(COleVariant((short)3)); //置中
range.SetMergeCells(_variant_t(true)); //合併儲存格
range.SetColumnWidth(_variant_t((float)30.38)); //設定欄寬
range.SetRowHeight(_variant_t((float)54.00)); //設定欄高
col = range.GetEntireColumn(); //選取某個範圍的一整排
col.AutoFit(); //自動調整一整排的欄寬
(列同理)

設定字型
font = range.GetFont(); //取得選取範圍,設定字型的記憶體位址
font.SetName(_variant_t("Arial")); //設定字型
font.SetSize(_variant_t((short)12)); //設定字體大小pt
font.SetBold(_variant_t((short)TRUE)); //粗體
font.SetColorIndex(_variant_t((short)5)); //字色(查表,應該還有更好的方法)

設定儲存格
cell = range.GetInterior(); //取得選取範圍,設定儲存格的記憶體位址
cell.SetColorIndex(_variant_t((short)5)); //設定底色(查表)

其它
char buf[200]; //暫存的字串
ZeroMemory(buf,sizeof(buf)); //清空記憶體
sprintf(buf,"A%c33",'A'+i-11); //用變數定義儲存格座標
strcpy(buf,"總計"); //定義欲輸入的字串

圖表
//畫圖
lpDisp = objSheet.ChartObjects(VOptional);
chartobjects.AttachDispatch(lpDisp); // Attach the lpDisp pointer for ChartObjects to the chartobjects object.
chartobject = chartobjects.Add(20, 140, 350, 250); //defines the rectangle,
// adds a new chart at that rectangle and assigns its object reference to a ChartObject variable named chartobject
xlsChart.AttachDispatch(chartobject.GetChart()); // GetChart() returns LPDISPATCH, and this attaches it to your chart object.
lpDisp = objSheet.GetRange(COleVariant("B3"), COleVariant("F6")); // The range containing the data to be charted.
range.AttachDispatch(lpDisp);
var.vt = VT_DISPATCH;
// .vt is the usable member of the tagVARIANT Struct. Its value is a union of options.
var.pdispVal = lpDisp; // Assign IDispatch pointer of the Source range to var.
xlsChart.ChartWizard(
var, // Source.
COleVariant((short)11), // Gallery: 3d Column.
VOptional, // Format, use default.
COleVariant((short)1), // PlotBy: xlRows.
COleVariant((short)1), // CategoryLabels.
_variant_t("Open,Working,Verify,Returned,Closed,Canceled"), 
COleVariant((short)1), // SeriesLabels.
COleVariant((short)TRUE), // HasLegend.
VOptional, //COleVariant("Use by Month"), // Title.
VOptional, //COleVariant("Month"), // CategoryTitle.
VOptional, //COleVariant("Usage in Thousands"), // ValueTitles.
VOptional // ExtraTitle.
);
xlsChart.SetChartType((long)55); //設定圖表類型(查表:圖表種類篇)
//調刻度
/*_Axis ax = xlsChart.Axes(_variant_t((short)2),_variant_t((short)1)); //2是縱軸, 1不清楚
sc = ax.GetMaximumScale();
if(sc < 5.0)
{
chart.SetAutoScaling(FALSE);
ax.SetMajorUnitIsAuto(FALSE);
ax.SetMajorUnit(1);
ax.SetMinorUnitIsAuto(FALSE);
ax.SetMinorUnit(1);
//ax.SetMinorUnitScale(1);
ax.SetMaximumScale((long)(sc+1)); //最大刻度
}*/

結尾
objApp.SetUserControl(TRUE);
range.ReleaseDispatch();chartobject.ReleaseDispatch();
chartobjects.ReleaseDispatch();objSheet.ReleaseDispatch();
objSheets.ReleaseDispatch();objBook.ReleaseDispatch();
objBooks.ReleaseDispatch();
objApp.ReleaseDispatch();

參考資料:

流浪小築 http://www.intra.idv.tw/

MFC用在Excel(載入Class篇)

沒有留言:

以VC++ 6為例

Add Class→From type library→Excel.exe
(沒看錯!要用.exe檔來載入Excel的Class,Office系列都這樣....吧?)

修理空檔燈之順便改國際檔

沒有留言:
這是一篇改車文!沒錯!我又改車啦!

這次還是網路上沒有的文章!所以,我想來發一下
改了才知道為什麼沒有人發過,不是價錢太高的問題,也不是車行不願意改的問題
而是太簡單了!沒什麼好發的!(是吧?)

改裝項目

野狼傳奇R125(PA12C)
循還檔改國際檔。

改裝目的

安全性

空檔燈壞掉,想修,卻是引擎內部的小銅片斷掉,修它要拆引擎。
光修它就要2500+(車行報價)
但是,萬一修好,又斷了?是不是又要再花一次?
所以,如果我有國際檔,是不是只要打到底,再勾一下,就是空檔了呢?
所以,一勞永逸的方式,就是改國際檔。

改裝性質

不可逆改裝(因為有修原本的零件)

改裝備料

  • 24411-B8A-000 變速凸輪     GEAR SHIFT CAM
  • 24430-B06-000 變速筒制止器
  • 2430A-B8A-000 變速筒總成   GEAR SHIFT DRUM ASSY

只要換的零件,如圖。
其它用修改的(怎麼修改,我也不知道,車行老闆說他有修改)

(由左至右依序:星型凸輪、停止器(軸版)、變速鼓)

基本上,這次改裝我沒有參與,是利用工作時間,車丟給車行,車行自由處理。
但是,車行老闆的改裝報告和報價讓我覺得,應該要貼一下,因為和網路上的說法不太一樣。


改裝報告

  1. 改裝零件只有這三樣,「齒輪順序」因為改了變速鼓,所以齒輪要改。
    但是我去算了一下150的齒輪齒數,每一檔都和125的一樣,所以只有順序不一樣,我就把你車上原本的齒輪順序調整一下。
    其實就可以了!所以,主副軸和齒輪完全都是舊料,沒有更動。                                     
  2. 修改的零件,踩發桿的開罐器那個零件有修改。
換零件的部份,就只有圖上三樣東西。
還有你的空檔燈也修好了

報價:4600元。


參考資料

  1. 五檔野狼改國際檔(往復檔)、引擎拆裝教學(update9/25)
  2. [心得]改狼R國際檔注意事項!