シート内の全てのCellをコピーし、別のシートへペースト
【概要】
コピーしたセルを貼り付けるには、RangeオブジェクトのメソッドPasteSpecialを使います。
[メソッド]
PasteSpecial (
enum XlPasteType Paste,
enum XlPasteSpecialOperation Operation,
const _variant_t & SkipBlanks, //省略可能
const _variant_t & Transpose //省略可能
)
[引数]
・XlPasteType
typedef enum {
xlPasteAll = -4104,
xlPasteAllExceptBorders = 7,
xlPasteFormats = -4122,
xlPasteFormulas = -4123,
xlPasteComments = -4144,
xlPasteValues = -4163,
xlPasteColumnWidths = 8,
xlPasteValidation = 6,
xlPasteFormulasAndNumberFormats = 11,
xlPasteValuesAndNumberFormats = 12
} XlPasteType;
・XlPasteSpecialOperation
typedef enum {
xlPasteSpecialOperationAdd = 2,
xlPasteSpecialOperationDivide = 5,
xlPasteSpecialOperationMultiply = 4,
xlPasteSpecialOperationNone = -4142,
xlPasteSpecialOperationSubtract = 3
} XlPasteSpecialOperation;
【サンプル】
//Excelを操作するためのタイプライブラリを読みこむ(Excel2002用)
#import "C:\Program Files\Common Files\Microsoft Shared\Office10\MSO.DLL" no_namespace rename("DocumentProperties", "DocumentPropertiesXL")
#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\Vbe6ext.olb" no_namespace
#import "C:\Program Files\Microsoft Office\Office10\EXCEL.EXE" rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") rename("DocumentProperties", "DocumentPropertiesXL") no_dual_interfaces
//実行用コード
void CShtcellcopyDlg::OnButton1()
{
int i;
char buffer[9];
COleVariant data,data1;
using namespace Excel;
_ApplicationPtr pXL;
//Excelの起動
pXL.CreateInstance(L"Excel.Application");
pXL->Visible = TRUE;
//WorkBookを追加する
WorkbooksPtr pBooks = pXL->Workbooks;
_WorkbookPtr pBook = pBooks->Add((long)xlWorkbook);
//アクティブ・シートを取得
_WorksheetPtr pSheet = pXL->ActiveSheet;
//Cellsを使用したデータの出力
for(i = 1; i < 10; i++){
data = (short)i;
data1 = (short)1;
RangePtr pCells = pSheet->Cells->Item[data][data1];
itoa(i,buffer,10);
pCells->Value2 = buffer;
}
//Worksheetを追加する
pBook->Worksheets->Add();
//シート内のCellをクリップ・ボードへコピー
pSheet->Cells->Copy();
//アクティブ・シートを移動
data = (short)1;
pSheet = pBook->Worksheets->Item[data];
pSheet->Select();
//クリップ・ボードへコピーしたデータを貼り付ける
RangePtr pRange = pSheet->Cells;
pRange->PasteSpecial(xlPasteAll, xlPasteSpecialOperationNone);
AfxMessageBox("動作確認のために一時停止");
pXL->DisplayAlerts = FALSE;
pXL->Quit();
}