查看完整版本: [-- 自用的Excel访问操作类 --]

QTCN开发网 -> Qt代码秀 -> 自用的Excel访问操作类 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

realfan 2014-03-04 08:45

自用的Excel访问操作类

[attachment=11779][attachment=11780]

包括设置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 2014-03-04 08:48
更详细用法说明稍后补充,预留
    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 2014-03-04 20:41
好牛啊,能否可以贴图。

libaineu2004 2014-03-06 12:32
灰常好!感谢版主!

skykingf 2014-05-22 13:58
不错不错 很好的东西

dfighoerng 2014-06-07 13:55
好东西,谢楼主了

lujy1988 2014-07-30 11:19
能向Excel插图片吗

woniu600 2014-09-14 17:42
有没有方法可以 在qt程序中(e.g. QTextEdit) 中 粘贴 excel的内容

weinkym 2014-10-09 09:20
woniu600:有没有方法可以 在qt程序中(e.g. QTextEdit) 中 粘贴 excel的内容 (2014-09-14 17:42) 

应该可以的

woniu600 2014-10-14 21:33
weinkym:应该可以的 (2014-10-09 09:20) 

how?

weinkym 2014-10-15 09:34
woniu600:how? (2014-10-14 21:33) 

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

woniu600 2014-10-15 19:59
weinkym:去读剪切板的数据 简析出来 (2014-10-15 09:34) 

好~

z609932088 2015-11-10 09:34
我用过一段时间,但是我在解析excel文件的时候,会遇到将excel打开,放到桌面,不知道楼主有遇到过没有啊

圣域天子 2015-11-10 20:36
z609932088:我用过一段时间,但是我在解析excel文件的时候,会遇到将excel打开,放到桌面,不知道楼主有遇到过没有啊 (2015-11-10 09:34) 

什么意思???

z609932088 2015-11-11 10:21
圣域天子:什么意思??? (2015-11-10 20:36) 

就是他不会在后台解析,是先打开excel文件,和用鼠标双击打开excel文件效果一样,完了在读取信息

realfan 2015-11-11 13:07
z609932088:就是他不会在后台解析,是先打开excel文件,和用鼠标双击打开excel文件效果一样,完了在读取信息 (2015-11-11 10:21) 

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

设置Visible为false试试

z609932088 2015-11-11 13:24
realfan:void QExcel::showExcelApp(bool b)
{
    m_pExcel->setProperty("Visible", b);
}
....... (2015-11-11 13:07) 

好的,谢谢

lwfchat 2017-10-02 23:26
学习

hunterzf 2017-10-22 11:40
正需要,谢谢

clickto 2017-11-28 13:47
感谢楼主分享!!!

柔情小生 2019-03-27 18:00
谢谢楼主,好东东呀

马大木头 2019-11-02 10:19

遨游的小鱼 2020-03-11 16:07
十分感谢!有word操作的吗?

lkrzx@qq.com 2020-03-31 16:20
谢谢楼主分享

shokokawaii 2023-10-22 09:11
感谢分享


查看完整版本: [-- 自用的Excel访问操作类 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled