• 116阅读
  • 6回复

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

上一主题 下一主题
离线heimareed
 

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

只看该作者 1楼 发表于: 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
离线never_forget

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

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

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

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

只看该作者 5楼 发表于: 前天 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);
离线圣域天子

只看该作者 6楼 发表于: 前天 13:10
回 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) 下载次数:0
附件: tcExcel.h (10 K) 下载次数:0
快速回复
限100 字节
 
上一个 下一个