查看完整版本: [-- Excel如何添加Sheet并自定义名称? --]

QTCN开发网 -> 天池项目 -> Excel如何添加Sheet并自定义名称? [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

heimareed 2017-04-21 17:25

Excel如何添加Sheet并自定义名称?

各位大侠好,本人菜鸟一枚。最近刚好碰到说要进行Excel操作,照搬天池项目中的代码。源码中貌似没有添加Sheet和修改Sheet名称的函数,跪求大神实现啊。

heimareed 2017-04-22 10:13

/**
* 向Excel中插入新的Sheet(追加到末尾)
* @return   true/false
*/
bool ExcelBase::addSheet(void)
{
    bool ret = false;
#if defined(Q_OS_WIN)
    Q_D(ExcelBase);
    if (d->excel != NULL && !d->excel->isNull())
    {
        TC_FREE(d->sheet);
        int count = d->sheets->property("Count").toInt();
        QAxObject * last = d->sheets->querySubObject("Item(int)", count);
        d->sheets->dynamicCall("Add(QVariant)", last->asVariant());
        d->sheet = d->sheets->querySubObject("Item(int)", count);
        ret = d->sheet != NULL && !d->sheet->isNull();
        if(ret)
        {
            last->dynamicCall("Move(QVariant)", d->sheet->asVariant());
        }
    }
#endif // Q_OS_WIN
    return ret;
}

/**
* 向Excel中插入新的Sheet(追加到末尾)
* @return   true/false
*/
bool ExcelBase::addSheet(const QString& sheetName)
{
    bool ret = false;
#if defined(Q_OS_WIN)
    Q_D(ExcelBase);
    if (d->excel != NULL && !d->excel->isNull())
    {
        TC_FREE(d->sheet);
        int count = d->sheets->property("Count").toInt();
        QAxObject * last = d->sheets->querySubObject("Item(int)", count);
        d->sheets->dynamicCall("Add(QVariant)", last->asVariant());
        d->sheet = d->sheets->querySubObject("Item(int)", count);
        ret = d->sheet != NULL && !d->sheet->isNull();
        if(ret)
        {
            d->sheet->setProperty("Name", sheetName);
            last->dynamicCall("Move(QVariant)", d->sheet->asVariant());
        }
    }
#endif // Q_OS_WIN
    return ret;
}

never_forget 2017-04-22 12:19
我不知道,先插个眼~~~

XChinux 2017-04-23 11:59

heimareed 2017-04-24 09:52
XChinux:[表情] [表情]  (2017-04-23 11:59) 

哈哈,我这菜鸟居然惊动了总版主。
二楼的代码虽然功能实现了,但是带Sheet名的那个,没有做重名检测,所以需要自行维护。
另外,目前貌似只能存储为xls格式,我尝试存了个xlsx,打开失败。还望各位大侠指教……

heimareed 2017-04-24 11:51
支持xlsx文件类型:

        int fileType = 56;     //  默认采用xls格式
        QString typeName = strPath.section('.', -1, -1);
        if(typeName == "xlsx")
            fileType = 51;      // 56 -> xls   51 -> xlsx

        qDebug()<<strPath;
        d->book->dynamicCall("SaveAs(const QString&, int, const QString&, const QString&, bool, bool)",
                                             strPath, fileType, QString(""), QString(""), false, false);

圣域天子 2017-04-24 13:10
heimareed:
支持xlsx文件类型:
        int fileType = 56;     //  默认采用xls格式
        QString typeName = strPath.section('.', -1, -1);
        if(typeName == "xlsx")
.......

刚看到贴子~~~

  1. /// @brief 设置当前工作簿名称
        void setName(const QString& sheetName);

        /// @brief 添加工作簿
        void addSheet(const QString& sheetName=QString());




heimareed 2017-05-03 11:26
圣域天子:刚看到贴子~~~
/// @brief 设置当前工作簿名称
    void setName(const QString& sheetName);
....... (2017-04-24 13:10) 

谢谢老大分享。我看还加入了导出PDF文档,大赞!!!

之前自己改的部分已经够用了,回头把老大的新代码加入代码库,完美!!!

寻觅虚无 2018-03-15 16:17
圣域天子:刚看到贴子~~~
/// @brief 设置当前工作簿名称
    void setName(const QString& sheetName);
....... (2017-04-24 13:10) 

厉害,这个除了代码,有相关原理介绍的吗?就是关于COM,OLE的应用方面的介绍

xigualala 2020-05-20 11:55
最近刚好碰到说要进行Excel福彩3D操作,照搬天池项目中的代码。源码中貌似没有添加Sheet和修改Sheet名称的函数,跪求大神实现啊。


查看完整版本: [-- Excel如何添加Sheet并自定义名称? --] [-- top --]



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