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

구현 환경
C++ Builder XE4

운영 환경
Windows 8.1 Pro (32bit)
Excel 2016

XE4에서 Excel 파일을 읽고 내보낼 수 없는지 찾고 있었다.

@mojeld 님의 기사를 찾았습니다.
Access to Excel cells in "C++ Builder XE4"

정보 감사입니다.

파일



다음 Excel 파일을 준비합니다.
  • Name: 아이우에오 .xlsx
  • 시트 이름 : 체크
  • 다음과 같은 데이터 준비
  • 셀 C5에 값이 들어 있음 (예 : 43)


  • 처리 전


    처리 후




    코드 v0.2



    셀에 독서의 처리를 함수로 해 보았다.
    또, 쓰는 방법을 자신의 스타일로 변경하고 있다.

    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.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 String 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定義
            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);
    
                this->Caption = getCellValue(xls_asheet, 5, 3);
                setCellValue(xls_asheet, 1, 1, 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();
        }
    }
    //---------------------------------------------------------------------------
    

    좋은 웹페이지 즐겨찾기