C++ Builder XE4 > Excel 처리 > 첫 번째 시트 선택(시트 이름은 선택 사항) | getCellValue() | setCellValue()

운영 환경
C++ Builder XE4

C++ Builder XE4 > Link > Access to Excel cells in "C++ Builder XE4" | + 입력 파일 정보
계속.

첫 번째 시트 선택



첫 번째 시트를 선택하려면.
void __fastcall TForm1::Button2Click(TObject *Sender)
...
    Sheet1 = WorkBook1.PG("ActiveSheet");
    WorkBook1.PG("Sheets", 1).PR("Select");

위를 역순으로 실행하면 Sheet1에는 첫 번째 시트가 들어갈 것이다.

코드 v0.3, v0.4



Unit1.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include <System.Win.ComObj.hpp>  // EXCEL処理用
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------

/*
v0.4 Jan. 22, 2020
        - remove String declaration for setCellValue() as a return value
v0.3 Apr. 13, 2018
    - write text to 1st and 2nd sheets
v0.2 Apr. 13, 2018
    - add setCellValue()
    - add getCellValue()
v0.1 Apr. 13, 2018
    imported from
    http://mojelder.hatenablog.com/entry/2015/06/29/112326
*/


__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------

static String getCellValue(Variant asheet, int row, int col)
{
    return asheet.OlePropertyGet("Cells").
            OlePropertyGet("Item", row, col).OlePropertyGet("Value");
}

static void setCellValue(Variant asheet, int row, int col, WideString val)
{
    asheet.OlePropertyGet("Cells").
        OlePropertyGet("Item", row, col).OlePropertySet("Value", val);
}

void __fastcall TForm1::B_convertClick(TObject *Sender)
{
    static const WideString kXlsFile = "あいうえお.xlsx";

    Variant ExcelApp = CreateOleObject("Excel.Application");
    try
    {
        WideString inFilename = ExtractFileDir(ParamStr(0)) + "\\" + kXlsFile; // Openに使う文字列はWideString定義
        // not used: WideString inSheetname = L"チェック"; // シート名もWideString (または番号)
        Variant xls_books;
        Variant xls_abook;
        Variant xls_sheets;
        Variant xls_asheet;
        WideString writeText = "文字";  // 書き込む文字列 // WideString型で定義

        try
        {
            ExcelApp.OlePropertySet("Visible", false); // Excel not shown

            xls_books = ExcelApp.OlePropertyGet("Workbooks");
            xls_abook = xls_books.OleFunction("Open", inFilename);
            xls_sheets = xls_abook.OlePropertyGet("WorkSheets");

            //xls_asheet = xls_sheets.OlePropertyGet("Item", inSheetname);  // 固定シート名

            // 1. 最初のシート
            // シート取得
            xls_abook.OlePropertyGet("Sheets", 1).OleProcedure("Select");
            xls_asheet = xls_abook.OlePropertyGet("ActiveSheet");
            // 読込み、書換え
            this->Caption = getCellValue(xls_asheet, 5, 3);
            setCellValue(xls_asheet, 1, 1, writeText);

            // 2. 次のシート
            // シート取得
            xls_abook.OlePropertyGet("Sheets", 2).OleProcedure("Select");
            xls_asheet = xls_abook.OlePropertyGet("ActiveSheet");
            // 書換え
            setCellValue(xls_asheet, 2, 2, writeText);

            xls_abook.OleProcedure("Save"); //開いた*.xlsxを保存
            ExcelApp.OleProcedure("Quit"); //Excel終了。
        }
        __finally
        {
            xls_asheet = Unassigned(); // 変数を初期状態に
            xls_sheets = Unassigned();
            xls_abook = Unassigned();
            xls_books = Unassigned();
        }
    }
    __finally
    {
        ExcelApp = Unassigned();
    }
}
//---------------------------------------------------------------------------

실행



다음의 엑셀 파일을 준비한다.
  • 아이 우에오 .xlsx
  • 두 개의 시트가있는
  • 시트 이름은 선택 사항입니다 (예 : 샘플 1, 샘플 2)
  • 첫 번째 시트의 C5 셀에 값을 넣습니다 (예 : 43)

  • 처리 실시 후, 이하와 같이 된다.



    좋은 웹페이지 즐겨찾기