wafuの技術

技術習得の努力メモです。

C言語でExcel操作(COM)

C言語Excel操作をしたときのメモです。

 

#import "progid:Excel.Sheet" auto_search auto_rename rename_search_namespace("Office12")
using namespace Excel;


int main(){

//Excelオープン
_ApplicationPtr pXL;
CoInitialize(NULL);

//Excelの起動
pXL.CreateInstance(L"Excel.Application");

pXL->Visible[0] = VARIANT_TRUE;     //画面表示
//pXL->Visible[0] = VARIANT_FALSE;  //

//WorkBookを追加する
WorkbooksPtr pBooks = pXL->Workbooks;
_WorkbookPtr pBook = pBooks->Add((long)xlWorksheet);
_WorksheetPtr pSheet = pXL->ActiveSheet;


//値をセット

pSheet->Cells->Item[1][1] = L"スケジュール";
pSheet->Cells->Item[2][1] = L"火曜日";
pSheet->Cells->Item[2][2] = L"水曜日";
pSheet->Cells->Item[2][3] = L"木曜日";


//スタイルの設定
pSheet->PageSetup->Zoom = 75;
pSheet->PageSetup->TopMargin = 80;
pSheet->PageSetup->LeftMargin = 70;
pSheet->PageSetup->BottomMargin = 43;
pSheet->PageSetup->RightMargin = 43;
pSheet->PageSetup->LeftHeader = "";
pSheet->PageSetup->CenterHeader = "";
pSheet->PageSetup->RightHeader = "";
pSheet->PageSetup->LeftFooter = "";
pSheet->PageSetup->CenterFooter = "&P/&N";
pSheet->PageSetup->RightFooter = "";


//罫線
char ExcelRange[512];
sprintf(ExcelRange,"A2:H10");
pSheet->Range[ExcelRange]->Borders->LineStyle = Excel::xlContinuous;

//折り返して表示
pSheet->Range[ExcelRange]->WrapText = true;

//列の幅
char ExcelRange2[512];
strcpy(ExcelRange2,"A1:A1");
pSheet->Range[ExcelRange2]->ColumnWidth = 5;
strcpy(ExcelRange2,"B1:B1");
pSheet->Range[ExcelRange2]->ColumnWidth = 10;
strcpy(ExcelRange2,"C1:C1");
pSheet->Range[ExcelRange2]->ColumnWidth = 25;


//ファイルを保存

pBook->SaveAs(L"e:\\Excel試験.xlsx"
,vtMissing
,vtMissing,vtMissing,vtMissing,vtMissing
,xlExclusive
);


//終了の処理

pSheet = NULL;
pBook->Close();
pBook.Release();
pBooks.Release();
pXL->Quit();
pXL = NULL;

if (pXL != NULL){
pXL->Release();
}
CoUninitialize();

return 0;

}