Пятница, Сентябрь 18, 2020

Открыть Excel

// ExcelTestDlg.h : header file
//

#pragma once
#include "afxwin.h"

class CExcelTestDlgAutoProxy;


// CExcelTestDlg dialog
class CExcelTestDlg : public CDialogEx
{
    DECLARE_DYNAMIC(CExcelTestDlg);
    friend class CExcelTestDlgAutoProxy;

// Construction
public:
    CExcelTestDlg(CWnd* pParent = NULL);    // standard constructor
    virtual ~CExcelTestDlg();

// Dialog Data
    enum { IDD = IDD_EXCELTEST_DIALOG };

    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support


// Implementation
protected:
    CExcelTestDlgAutoProxy* m_pAutoProxy;
    HICON m_hIcon;

    BOOL CanExit();

    // Generated message map functions
    virtual BOOL OnInitDialog();
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    afx_msg void OnClose();
    virtual void OnOK();
    virtual void OnCancel();
    DECLARE_MESSAGE_MAP()
public:
    afx_msg void OnBnClickedOpenExcel();
protected:
    CString m_csSourcePathName;
public:
    CString m_csDestFileName;
    CEdit m_EditSourceFilePath;
    // Commonly used OLE variants.
    COleVariant covTrue;
    COleVariant covFalse;
    COleVariant covOptional;

};

 

// ExcelTestDlg.cpp : implementation file
//

 

#include "stdafx.h"
#include "ExcelTest.h"
#include "ExcelTestDlg.h"
#include "DlgProxy.h"
#include "afxdialogex.h"
#include "CApplication.h"
#include "CRange.h"
#include "CWorkbook.h"
#include "CWorkbooks.h"
#include "CWorksheet.h"
#include "CWorksheets.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif

 

.......

 


// CExcelTestDlg dialog

 


IMPLEMENT_DYNAMIC(CExcelTestDlg, CDialogEx);

 

CExcelTestDlg::CExcelTestDlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(CExcelTestDlg::IDD, pParent)
    , m_csSourcePathName(_T(""))
    , m_csDestFileName(_T(""))
    ,covFalse((short)FALSE)
    ,covTrue((short)TRUE)
    ,covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR)
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    m_pAutoProxy = NULL;
}

 

CExcelTestDlg::~CExcelTestDlg()
{
    // If there is an automation proxy for this dialog, set
    //  its back pointer to this dialog to NULL, so it knows
    //  the dialog has been deleted.
    if (m_pAutoProxy != NULL)
        m_pAutoProxy->m_pDialog = NULL;
}

 

void CExcelTestDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_EDIT1, m_EditSourceFilePath);
}

 

BEGIN_MESSAGE_MAP(CExcelTestDlg, CDialogEx)
    ON_WM_SYSCOMMAND()
    ON_WM_CLOSE()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_OPEN_EXCEL, &CExcelTestDlg::OnBnClickedOpenExcel)
END_MESSAGE_MAP()


void CExcelTestDlg::OnBnClickedOpenExcel()
{
    //Чистим лист бокс
    m_LBInfoExcel.ResetContent();
////////////////////////////Стандартный поиск файлов///////////////////////////////////
    TCHAR szFilters[]= _T("All Files (*.*)|*.*||");
    CFileDialog fileDlg(TRUE,0, _T("*.*"),
        OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, szFilters);
    if(fileDlg.DoModal() == IDOK)
    {
        m_csSourcePathName = fileDlg.GetPathName();
        m_csDestFileName = fileDlg.GetFileTitle();
        int find=m_csSourcePathName.Find('\\',0);
        if(find!=-1)
        m_csSourcePathName.Insert(find,'\\');
        while(find!=-1)
        {
            find=m_csSourcePathName.Find('\\',find+2);
            if(find!=-1)
                m_csSourcePathName.Insert(find,'\\');
        }
        m_EditSourceFilePath.SetWindowTextA(m_csSourcePathName);
        SetWindowText(m_csDestFileName);
    }
///////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////Шаг 1.Открываем сервер///////////////////////////////////////
    CApplication app;
    CString text;
    if(!app.CreateDispatch(TEXT("Excel.Application")))
    {
        AfxMessageBox(TEXT("Couldn't start Excel and get Application object."));
        return;
    }
    app.put_Visible(TRUE);
    app.put_UserControl(TRUE);

////////////////////////////Шаг 2. Создаем Книги//////////////////////////////////////////
    CWorkbooks oBooks;
    CWorkbook oBook;
    long cntBooks=0;
    oBooks = app.get_Workbooks();
    oBook=oBooks.Open(m_csSourcePathName,covOptional,
        covTrue,covOptional,COleVariant(""),
        COleVariant(""),
        covTrue,covOptional,covOptional,
        covOptional,covOptional,
        covOptional,covOptional,covOptional,covOptional);

    cntBooks=oBooks.get_Count();
    text.Format("% d",cntBooks);
    text+=" - Книг в Excel";
    m_LBInfoExcel.AddString(text);

/////////////////////////////////Шаг 3. Получаем листы./////////////////////////////////////
    CWorksheets oSheets;
    CWorksheet oSheet;
    oSheets=oBook.get_Worksheets();
    long cntSheets=0;
    cntSheets=oSheets.get_Count();
    text.Format("% d",cntSheets);
    text+=" - Листов в Excel";
    m_LBInfoExcel.AddString(text);
    if(m_CBNumSheets.GetCurSel()>cntSheets)
    {
        oBooks.Close();
        app.Quit();
        AfxMessageBox("стока нету тут листов");
        return;
    }
    oSheet=oSheets.get_Item(COleVariant((short)m_CBNumSheets.GetCurSel()));
    oSheet.Activate();
    
//////////////////////////////Шаг 4. Получаем доступ к Ячейкам через CRange//////////////////
    CRange oRange;
    CString findString;
    long col=0,row=0,cntRange=0;
    VARIANT vr;
    oRange=oSheet.get_UsedRange();
    cntRange=oRange.get_Count();
    text.Format("% d",cntRange);
    text+=" - Используемых Ячеек";
    m_LBInfoExcel.AddString(text);
    m_EditFindString.GetWindowTextA(findString); //получаем искомую строку
    oRange=oRange.Find(COleVariant(findString),covOptional, // найти строку
        covOptional,covOptional,covOptional,
        xlNext,covOptional,
        covOptional,covOptional);
    oRange.Select();

    vr=oRange.get_Text();
    text=vr.bstrVal;
    m_LBInfoExcel.AddString(text);
    col=oRange.get_Column();
    text.Format("% d",col);
    text+=" - Столбец";
    m_LBInfoExcel.AddString(text);
    row=oRange.get_Row();
    text.Format("% d",row);
    text+=" - Строка";
    m_LBInfoExcel.AddString(text);
}


Back to Top