• 8141阅读
  • 9回复

Excel如何添加Sheet并自定义名称? [复制链接]

上一主题 下一主题
离线heimareed
 

只看楼主 正序阅读 楼主  发表于: 2017-04-21
各位大侠好,本人菜鸟一枚。最近刚好碰到说要进行Excel操作,照搬天池项目中的代码。源码中貌似没有添加Sheet和修改Sheet名称的函数,跪求大神实现啊。
离线xigualala

只看该作者 9楼 发表于: 2020-05-20
最近刚好碰到说要进行Excel福彩3D操作,照搬天池项目中的代码。源码中貌似没有添加Sheet和修改Sheet名称的函数,跪求大神实现啊。
离线寻觅虚无

只看该作者 8楼 发表于: 2018-03-15
回 圣域天子 的帖子
圣域天子:刚看到贴子~~~
/// @brief 设置当前工作簿名称
    void setName(const QString& sheetName);
....... (2017-04-24 13:10) 

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

只看该作者 7楼 发表于: 2017-05-03
回 圣域天子 的帖子
圣域天子:刚看到贴子~~~
/// @brief 设置当前工作簿名称
    void setName(const QString& sheetName);
....... (2017-04-24 13:10) 

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

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

只看该作者 6楼 发表于: 2017-04-24
回 heimareed 的帖子
heimareed:
支持xlsx文件类型:
        int fileType = 56;     //  默认采用xls格式
        QString typeName = strPath.section('.', -1, -1);
        if(typeName == "xlsx")
.......

刚看到贴子~~~

  1. /// @brief 设置当前工作簿名称
  2.     void setName(const QString& sheetName);
  3.     /// @brief 添加工作簿
  4.     void addSheet(const QString& sheetName=QString());



附件: tcExcel.cpp (26 K) 下载次数:27
附件: tcExcel.h (10 K) 下载次数:26
1条评分金钱+1
hefred 金钱 +1 - 2017-07-02
离线heimareed

只看该作者 5楼 发表于: 2017-04-24
支持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);
离线heimareed

只看该作者 4楼 发表于: 2017-04-24
回 XChinux 的帖子
XChinux:[表情] [表情]  (2017-04-23 11:59) 

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

只看该作者 3楼 发表于: 2017-04-23
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线never_forget

只看该作者 2楼 发表于: 2017-04-22
我不知道,先插个眼~~~
离线heimareed

只看该作者 1楼 发表于: 2017-04-22

/**
* 向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;
}
本帖提到的人: @return
快速回复
限100 字节
 
上一个 下一个