• 7170阅读
  • 19回复

自用的Excel访问操作类 [复制链接]

上一主题 下一主题
离线realfan
 

只看楼主 倒序阅读 楼主  发表于: 2014-03-04
— 本帖被 XChinux 执行加亮操作(2014-03-04) —
qexcel.cpp (17 K) 下载次数:389 qexcel.h (7 K) 下载次数:361

包括设置Excel单元格格式颜色,边框,合并单元格等操作,支持列标识为三个字母的操作

QExcel * pExcelProc = new QExcel(this);
   pExcelProc->showExcelApp(true);
    //---------------------
    pFont->ucMask = 0;
    pFont->ucMask |= MASK_BIT_FONT_NAME | MASK_BIT_FONT_SIZE;
    pFont->strFontName = "Arial";
    pFont->ucFontSize = 9;
    pExcelProc->setRangeFont(1, 1, 2000, 200, pFont);
    pExcelProc->setRangeWrap(1, 1, 2000, 200, true);//设置换行

    //==========报表总标题================
//    for(int i = 0; i < m_lstXlsColWidth.size(); ++i)
//    {
//        pExcelProc->setColumnWidth(i+1, m_lstXlsColWidth);
//    }

    int idxRow = 1;
    int idxCol = 1;
    pExcelProc->mergeCells(idxRow, idxCol, idxRow, 7);
    pExcelProc->setCellString(idxRow, idxCol, QString("报表"));
    //-------字体--------
    pFont->ucMask = 0;
    pFont->ucMask |= MASK_BIT_FONT_SIZE | MASK_BIT_FONT_BOLD;
    pFont->ucFontSize = 16;
    pFont->bBold = true;
    pExcelProc->setRangeFont(idxRow, idxCol, idxRow + 1, 200, pFont);

    pExcelProc->setRangeFormat(2, 1, 2, 200, "@");
    pFont->ucMask = 0;
    pFont->ucMask |= MASK_BIT_FONT_SIZE | MASK_BIT_FONT_BOLD;
    pFont->ucFontSize = 12;
    pFont->bBold = true;
    pExcelProc->setRangeFont(2, 1, 2, 200, pFont);

    //pExcelProc->setCellString(2, 6, tr("时间:"));
    pExcelProc->mergeCells(2, 7, 2, 8);
    //pExcelProc->setCellString(2, 7, m_ReadTime.toString("yyyy-MM-dd"));
    //pExcelProc->setCellString(2, 9, m_ReadTime.toString("hh:mm:ss"));
    //-------对齐-------

    pBorder->ucStyle = 1;
    pBorder->ucWidth = 2;
    pBorder->ucColorIndex = 1;
    pAlig->H = ALIGNMENT_CENTER;
    pAlig->V = ALIGNMENT_CENTER;
    pExcelProc->setRangeAlignment(idxRow, idxCol, idxRow + 1, 200, pAlig);
    //------------------Region quarter month--------------------------------------------------------------
//    idxRow++; //2
//    pFont->ucFontSize = 9;
//    pExcelProc->setRangeFont(idxRow, 1, 10000, 254, pFont);

    QTableWidget * pTbl = (QTableWidget*)(m_pTabWidget->currentWidget());
    //============表头========================================
    idxRow = iStartRow;
    QStringList lstStr;
    lstStr << tr("单号|10") << tr("接车时间|20") << tr("车牌号|15") << tr("品牌|15")
                    <<tr("车主|15")<<tr("手机|15");


    for(int i = 0; i < lstStr.size(); ++i)
    {
        QStringList lst = lstStr.at(i).split("|", QString::SkipEmptyParts);
        pExcelProc->setCellString(idxRow, i+1, lst.at(0));

        pExcelProc->setColumnWidth(i+1, lst.at(1).toInt());
    }
    int iColCount = lstStr.size();
    pFont->ucMask = 0;
    pFont->ucMask |= MASK_BIT_FONT_BOLD;
    //pFont->ucFontSize = 16;
    pFont->bBold = true;
    pExcelProc->setRangeFont(idxRow, 1, idxRow, 250, pFont);
    pExcelProc->setRangeBkColor(idxRow, 1, idxRow, iColCount, Qt::gray);
    //============内容==============================
    pFont->bBold = false;
    pExcelProc->setRangeFont(idxRow+1, 1, 10000, 254, pFont);
    pExcelProc->setRangeFormat(iStartRow, 1, pTbl->rowCount()+iStartRow, 13, "@");
    pExcelProc->setRangeFormat(iStartRow, 8, pTbl->rowCount()+iStartRow, 9, "@");


    pFont->ucMask = 0;
    pFont->ucMask |= MASK_BIT_FONT_SIZE;
    pFont->ucFontSize = 9;
    //pFont->dwFontColor = cl;//QColor(150, 150, 150);
    pExcelProc->setRangeFont(iStartRow, 1, pTbl->rowCount()+iStartRow, iColCount, pFont);
    //pExcelProc->setRangeFormat(iStartRow, 1, m_lstRec.size()+iStartRow, iColCount, "@");


    pAlig->H = ALIGNMENT_CENTER;
    pAlig->V = ALIGNMENT_CENTER;
    pExcelProc->setRangeAlignment(iStartRow, 1, pTbl->rowCount()+iStartRow, iColCount, pAlig);
    pExcelProc->drawGrid(iStartRow, 1, pTbl->rowCount()+iStartRow, iColCount);
离线realfan

只看该作者 1楼 发表于: 2014-03-04
更详细用法说明稍后补充,预留
    void selectSheet(const QString& sheetName);  //选择WorkSheet
    //sheetIndex 起始于 1
    void selectSheet(int sheetIndex);   //选择WorkSheet
   void deleteSheet(const QString& sheetName); //删除WorkSheet
    void deleteSheet(int sheetIndex); //删除WorkSheet
    void insertSheet(QString sheetName); //插入WorkSheet
   int getSheetsCount();  //获取WorkSheet总数
    //在 selectSheet() 之后才可调用
    QString getSheetName(); //获取选中的Sheet名称
    QString getSheetName(int sheetIndex); //获取某个Index的WorkSheet名称
    /**************************************************************************/
   /* 单元格                                                                 */    
/**************************************************************************/    
void setCellString(int row, int column, const QString& value);//设置某单元格文本
    //cell 例如 "A7"    
void setCellString(const QString& cell, const QString& value);//设置某单元格文本    
//range 例如 "A5:C7"    
void mergeCells(const QString& range);//合并单元格,如mergeCells(“A5:C7”)    
void mergeCells(int topLeftRow, int topLeftColumn, int bottomRightRow, int bottomRightColumn); //合并单元格
    QVariant getCellValue(int row, int column) const; //获取单元格内容
    void clearCell(int row, int column);//清除单元格内容
    void clearCell(const QString& cell);//清除单元格内容
    /**************************************************************************/
    /* 布局格式                                                               */
   /**************************************************************************/
   void getUsedRange(int *topLeftRow, int *topLeftColumn, int *bottomRightRow, int *bottomRightColumn);//获取使用范围,四个参数均为返回值,以后改为引用传出
    void setColumnWidth(int column, int width);//设置列宽
   void setColumnWidth(QString column, int width);//设置列宽
    void setRowHeight(int row, int height);
    void setCellTextCenter(int row, int column);
   void setCellTextCenter(const QString& cell);
    void setCellTextWrap(int row, int column, bool isWrap);
   void setCellTextWrap(const QString& cell, bool isWrap);
    void setAutoFitRow(int row);
   void setAutoFitColumn(int column);
   void mergeSerialSameCellsInAColumn(int column, int topRow);
   int getUsedRowsCount();
    void setCellFontBold(int row, int column, bool isBold);
   void setCellFontBold(const QString& cell, bool isBold);
   void setCellFontSize(int row, int column, int size);
   void setCellFontSize(const QString& cell, int size);
    /**************************************************************************/
    /* 文件                                                                   */
    /**************************************************************************/
   void save();
    void close();
   //===================added by wdg========================    
QAxObject * getRange(const QString &strCell1, const QString &strCell2 = "" );  
QAxObject * getRange(int minRow, int minCol, int maxRow=0, int maxCol=0);    
void setRangeFont(int minRow, int minCol, int maxRow, int maxCol, T_RangeFont * pFont);    
void setRangeWrap(int minRow, int minCol, int maxRow, int maxCol, bool bWrap = true);  
QString getCellText(int iRow, int iCol) const;    
void setRangeAlignment(int minRow, int minCol, int maxRow, int maxCol, T_Alignment * pAlignment);  
void setRangeBkColor(int minRow, int minCol, int maxRow, int maxCol, const QColor &colorRef);  
void setRangeBorder(int minRow, int minCol, int maxRow, int maxCol, T_RangeBorder * pRangeBorder =NULL );    
void drawGrid(int iminRow, int iminCol, int imaxRow, int imaxCol, T_RangeBorder * pRangeBorder = NULL );
    void showExcelApp(bool b);
    void setRangeFormat(int minRow, int minCol, int maxRow, int maxCol, const QString strFmt);
离线caicaiking

只看该作者 2楼 发表于: 2014-03-04
好牛啊,能否可以贴图。
离线libaineu2004

只看该作者 3楼 发表于: 2014-03-06
灰常好!感谢版主!
离线skykingf

只看该作者 4楼 发表于: 2014-05-22
不错不错 很好的东西
离线dfighoerng

只看该作者 5楼 发表于: 2014-06-07
好东西,谢楼主了
离线lujy1988

只看该作者 6楼 发表于: 2014-07-30
能向Excel插图片吗
离线woniu600

只看该作者 7楼 发表于: 2014-09-14
有没有方法可以 在qt程序中(e.g. QTextEdit) 中 粘贴 excel的内容
离线weinkym

只看该作者 8楼 发表于: 2014-10-09
回 woniu600 的帖子
woniu600:有没有方法可以 在qt程序中(e.g. QTextEdit) 中 粘贴 excel的内容 (2014-09-14 17:42) 

应该可以的
离线woniu600

只看该作者 9楼 发表于: 2014-10-14
回 weinkym 的帖子
weinkym:应该可以的 (2014-10-09 09:20) 

how?
离线weinkym

只看该作者 10楼 发表于: 2014-10-15
回 woniu600 的帖子
woniu600:how? (2014-10-14 21:33) 

去读剪切板的数据 简析出来
离线woniu600

只看该作者 11楼 发表于: 2014-10-15
回 weinkym 的帖子
weinkym:去读剪切板的数据 简析出来 (2014-10-15 09:34) 

好~
离线z609932088

只看该作者 12楼 发表于: 2015-11-10
我用过一段时间,但是我在解析excel文件的时候,会遇到将excel打开,放到桌面,不知道楼主有遇到过没有啊
有阳光的地方就是青春
离线圣域天子

只看该作者 13楼 发表于: 2015-11-10
回 z609932088 的帖子
z609932088:我用过一段时间,但是我在解析excel文件的时候,会遇到将excel打开,放到桌面,不知道楼主有遇到过没有啊 (2015-11-10 09:34) 

什么意思???
离线z609932088

只看该作者 14楼 发表于: 2015-11-11
回 圣域天子 的帖子
圣域天子:什么意思??? (2015-11-10 20:36) 

就是他不会在后台解析,是先打开excel文件,和用鼠标双击打开excel文件效果一样,完了在读取信息
有阳光的地方就是青春
离线realfan

只看该作者 15楼 发表于: 2015-11-11
回 z609932088 的帖子
z609932088:就是他不会在后台解析,是先打开excel文件,和用鼠标双击打开excel文件效果一样,完了在读取信息 (2015-11-11 10:21) 

void QExcel::showExcelApp(bool b)
{
    m_pExcel->setProperty("Visible", b);
}

设置Visible为false试试
离线z609932088

只看该作者 16楼 发表于: 2015-11-11
回 realfan 的帖子
realfan:void QExcel::showExcelApp(bool b)
{
    m_pExcel->setProperty("Visible", b);
}
....... (2015-11-11 13:07) 

好的,谢谢
有阳光的地方就是青春
离线lwfchat

只看该作者 17楼 发表于: 10-02
学习
离线hunterzf

只看该作者 18楼 发表于: 10-22
正需要,谢谢
离线clickto

只看该作者 19楼 发表于: 11-28
感谢楼主分享!!!
快速回复
限100 字节
 
上一个 下一个