• 大小: 15KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-08
  • 语言: 数据库
  • 标签: QT  EXCEL  SQLITE  

资源简介

QT读取excel文件 并可以修改 还有sqlite数据库 实现了一些 打开文件 保存 等基本功能(打印没实现)

资源截图

代码片段和文件信息

#include “excelengine.h“
#include “qt_windows.h“

ExcelEngine::ExcelEngine()
{
    pExcel     = NULL;
    pWorkbooks = NULL;
    pWorkbook  = NULL;
    pWorksheet = NULL;

    sXlsFile     = ““;
    nRowCount    = 0;
    nColumnCount = 0;
    nStartRow    = 0;
    nStartColumn = 0;

    bIsOpen  = false;
    bIsValid = false;

    HRESULT r = OleInitialize(NULL);
    if (r != S_OK && r != S_FALSE)
    {
        qDebug(“Qt: Could not initialize OLE (error %x)“ (unsigned int)r);
    }
}

ExcelEngine::ExcelEngine(QString xlsFile)
{
    pExcel     = NULL;
    pWorkbooks = NULL;
    pWorkbook  = NULL;
    pWorksheet = NULL;

    sXlsFile     = xlsFile;
    nRowCount    = 0;
    nColumnCount = 0;
    nStartRow    = 0;
    nStartColumn = 0;

    bIsOpen  = false;
    bIsValid = false;

    HRESULT r = OleInitialize(0);
    if (r != S_OK && r != S_FALSE)
    {
        qDebug(“Qt: Could not initialize OLE (error %x)“ (unsigned int)r);
    }

}

ExcelEngine::~ExcelEngine()
{
    if ( bIsOpen )
    {
        //析构前,先保存数据,然后关闭workbook
        Close();
    }
    OleUninitialize();
}

/**
  *@brief 打开sXlsFile指定的excel报表
  *@return true : 打开成功
  *        false: 打开失败
  */
bool ExcelEngine::Open(UINT nSheet bool visible)
{

    if ( bIsOpen )
    {
        //return bIsOpen;
        Close();
    }

    if ( NULL == pExcel )
    {
        this->pExcel = new QAxobject(“Excel.Application“this);
        if ( pExcel )
        {
            bIsValid = true;
        }
        else
        {
            bIsValid = false;
            bIsOpen  = false;
            return bIsOpen;
        }
        bIsVisible = false;
        pExcel->dynamicCall(“SetVisible(bool)“ bIsVisible);//是否显示Excel
    }

    if ( !bIsValid )
    {
        bIsOpen  = false;
        return bIsOpen;
    }

    if ( sXlsFile.isEmpty() )
    {
        bIsOpen  = false;
        return bIsOpen;
    }


    bool ok = CreateXlsFile(sXlsFile);
    if ( !ok )
    {
        bIsOpen  = false;
        return bIsOpen;
    }

    nCurrSheet = nSheet;
  //bIsVisible = visible;

    pWorkbooks = pExcel->querySubobject(“WorkBooks“); //获取工作簿
    pWorkbook =  pWorkbooks->querySubobject(“Open(QString QVariant)“sXlsFileQVariant(0)); //打开xls对应的工作簿
    pWorksheet = pWorkbook->querySubobject(“WorkSheets(int)“ nCurrSheet);//打开第一个sheet

    //至此已打开,开始获取相应属性
    QAxobject *usedrange = pWorksheet->querySubobject(“UsedRange“);//获取该sheet的使用范围对象
    QAxobject *rows = usedrange->querySubobject(“Rows“);
    QAxobject *columns = usedrange->querySubobject(“Columns“);
    qDebug()<<“rows“<    qDebug()<<“columns“<
    //因为excel可以从任意行列填数据而不一定是从00开始,因此要获取首行列下标
    nStartRow    = usedrange->property(“Row“).toInt();    //第一行的起始位置
    nStartColumn = usedrange->property(“Column“).toInt(); //第一列的起始位置

    nRowCount    = rows->property(“Count“).toInt();       //获取行数
    nColumnCount = columns->p

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-09-19 08:41  Qxcel_sqlite\
     文件        1772  2012-09-04 13:30  Qxcel_sqlite\close-file.png
     文件       10201  2012-09-19 11:28  Qxcel_sqlite\excelengine.cpp
     文件        2438  2012-09-19 11:32  Qxcel_sqlite\excelengine.h
     文件         493  2012-09-20 14:27  Qxcel_sqlite\jiaoduyi.pro
     文件        7988  2012-09-24 15:50  Qxcel_sqlite\jiaoduyi.pro.user
     文件        1344  2012-09-19 16:11  Qxcel_sqlite\judgeFileAndDeal.cpp
     文件         672  2012-09-19 15:01  Qxcel_sqlite\judgeFileAndDeal.h
     文件         377  2012-09-20 17:31  Qxcel_sqlite\main.cpp
     文件       10578  2012-09-24 08:44  Qxcel_sqlite\mywindow.cpp
     文件        2038  2012-09-19 15:49  Qxcel_sqlite\mywindow.h
     文件        1145  2012-09-10 15:04  Qxcel_sqlite\mywindow.ui
     文件        1117  2012-09-04 13:29  Qxcel_sqlite\open-file.png
     文件         131  2012-09-04 15:28  Qxcel_sqlite\source.qrc

评论

共有 条评论