Qt는 excel 코드를 읽습니다. 봉인되었습니다.

5499 단어
핵심 코드:
QAxObject* excel = new QAxObject("Excel.Application");
    excel->setProperty("Visible", false);
    QAxObject* workbooks = excel->querySubObject("WorkBooks");
    workbooks->dynamicCall("Open (const QString&)", QString("c:\\  1.xls")); //filename
    QAxObject* workbook = excel->querySubObject("ActiveWorkBook");
    QAxObject* worksheets = workbook->querySubObject("WorkSheets");
    QAxObject* worksheet = workbook->querySubObject("Worksheets(int)", 1); //worksheet number
    QAxObject* usedrange = worksheet->querySubObject("UsedRange");
    QAxObject* rows = usedrange->querySubObject("Rows");
    QAxObject* columns = usedrange->querySubObject("Columns");
    int intRowStart = usedrange->property("Row").toInt();
    int intColStart = usedrange->property("Column").toInt();
    int intCols = columns->property("Count").toInt();
    int intRows = rows->property("Count").toInt();
    QAxObject * cell;
    for (int i = intRowStart; i < intRowStart + intRows; i++)
    {
        for (int j = intColStart; j < intColStart + intCols; j++)
        {
            cell = excel->querySubObject("Cells(Int, Int)", i, j );
            QVariant cellValue = cell->dynamicCall("value");

            cout << "Content " << cellValue.toString().toStdString() << endl; //value of the cell
        }
    }
    excel->setProperty("DisplayAlerts", 0);
    workbook->dynamicCall("Save(void)");
    workbook->dynamicCall("Close (Boolean)", false);
    excel->setProperty("DisplayAlerts",1);

    delete excel;

========================================
========================================
패키지된 클래스는 다음과 같습니다.
--
readexcel.h
#ifndef READEXCEL_H
#define READEXCEL_H

#include 
#include 
#include 
#include 
#include 
#include 
#include 


class Position
{
public:
    Position() {
        m_row = 0;
        m_col = 0;
    }

    Position(int row, int col) {
        m_row = row;
        m_col = col;
    }
public:
    int m_row;
    int m_col;

public:
    bool operator m_mapdata;
    Position p;
};

#endif // READEXCEL_H

--
readexcel.cpp
#include "readexcel.h"
#include 
#include 

ReadExcel::ReadExcel()
    :m_row(0), m_col(0), m_filename("")
{
    m_excel = new QAxObject("Excel.Application");
}

ReadExcel::~ReadExcel()
{
    if (!m_mapdata.empty()) {
        m_mapdata.clear();
    }
    delete m_excel;
}

//
bool ReadExcel::openExcel(const QString &filename)
{
    if (filename.isEmpty()) {
        m_row = 0;
        m_col = 0;
        return false;
    }
    QFile file(filename);
    if (!file.exists()){
        m_row = 0;
        m_col = 0;
        return false;
    };
    if (!m_mapdata.empty()) {
        m_mapdata.clear();
    }
    m_filename = filename;
    try {
        getALLfromExcel();
    } catch (...) {
        return false;
    }

    return true;
}

void ReadExcel::getInfo(int &row, int &col) const
{
    row = m_row;
    col = m_col;
}

std::string ReadExcel::getCellData(const int &row, const int &col)
{
    if (row >= 1 && row <= m_row && col >= 1 && col <= m_col) {
        p.m_row = row;
        p.m_col = col;
        return m_mapdata[p];
    } else {
        return NULL;
    }
}

void ReadExcel::getALLfromExcel()
{
    m_excel->setProperty("Visible", 0);
    QAxObject* workbooks = m_excel->querySubObject("WorkBooks");
    workbooks->dynamicCall("Open (const QString&)", m_filename);
    QAxObject* workbook = m_excel->querySubObject("ActiveWorkBook");
    QAxObject* worksheets = workbook->querySubObject("WorkSheets");
    QAxObject* worksheet = workbook->querySubObject("Worksheets(int)", 1); //worksheet number
    QAxObject* usedrange = worksheet->querySubObject("UsedRange");
    QAxObject* rows = usedrange->querySubObject("Rows");
    QAxObject* columns = usedrange->querySubObject("Columns");
    int intRowStart = usedrange->property("Row").toInt();
    int intColStart = usedrange->property("Column").toInt();
    int intCols = columns->property("Count").toInt();
    int intRows = rows->property("Count").toInt();
    m_row = intRows;
    m_col = intCols;
    QAxObject * cell;
    for (int i = intRowStart; i < intRowStart + intRows; i++)
    {
        for (int j = intColStart; j < intColStart + intCols; j++)
        {
            Position pos(i, j);
            cell = m_excel->querySubObject("Cells(Int, Int)", i, j );
            QVariant cellValue = cell->dynamicCall("value");
            m_mapdata.insert(std::pair(pos, cellValue.toString().toStdString()));
        }
    }
    m_excel->setProperty("DisplayAlerts", 0);
    workbook->dynamicCall("Save(void)");
    workbook->dynamicCall("Close (Boolean)", false);
    m_excel->setProperty("DisplayAlerts",1);
}


----

좋은 웹페이지 즐겨찾기